谁帮忙看下下面的C++高精度乘法哪里错了。是高精度数乘一个正常精度数的程序
#include<iostream>#include<cstring>#include<cstdio>usingnamespacestd;#definemax1000ch...
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
#define max 1000
char s[max];
int num[max];
int key;
int len;
void tonum();
void multiply();
int main()
{
int x;
scanf("%d",&x);
while(x--){
scanf("%s",s);
tonum();
scanf("%d",&key);
if(key==0)
printf("0\n");
else{
multiply();
}
}
return 0;
}
void tonum()
{
memset(num,0,sizeof(num));
int j;
len=strlen(s);
j=len-1;
for(int i=len-1;i>=0;i--)
num[j--]=s[i]-'0';
}
void multiply()
{
int i,k;
for(i=0;i<len;i++)
num[i]=num[i]*key;
for(i=0;i<len;i++){
num[i+1]+=num[i]/10;
num[i]%=10;
}
while(num[i]>0){
num[i+1]=num[i]/10;
num[i]=num[i]%10;
i++;
len++;
}
for(i=len-1;i>=0;i--)
printf("%d",num[i]);
printf("\n");
}
关于3楼的问题,输出不是倒的,因为我存数的时候本身就是倒的,这样是为了方便从个位相乘。2楼也许是正解,没测试过 展开
#include <cstring>
#include <cstdio>
using namespace std;
#define max 1000
char s[max];
int num[max];
int key;
int len;
void tonum();
void multiply();
int main()
{
int x;
scanf("%d",&x);
while(x--){
scanf("%s",s);
tonum();
scanf("%d",&key);
if(key==0)
printf("0\n");
else{
multiply();
}
}
return 0;
}
void tonum()
{
memset(num,0,sizeof(num));
int j;
len=strlen(s);
j=len-1;
for(int i=len-1;i>=0;i--)
num[j--]=s[i]-'0';
}
void multiply()
{
int i,k;
for(i=0;i<len;i++)
num[i]=num[i]*key;
for(i=0;i<len;i++){
num[i+1]+=num[i]/10;
num[i]%=10;
}
while(num[i]>0){
num[i+1]=num[i]/10;
num[i]=num[i]%10;
i++;
len++;
}
for(i=len-1;i>=0;i--)
printf("%d",num[i]);
printf("\n");
}
关于3楼的问题,输出不是倒的,因为我存数的时候本身就是倒的,这样是为了方便从个位相乘。2楼也许是正解,没测试过 展开
展开全部
在软件环境里按F5调试,出错的命令双击显示哪行再找原因
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
没测试,不过int * int 再赋值给int很容易溢出的,不知道你是不是这问题.你测试的是多大的数
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你不感觉你的输出结果是倒的吗
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询