高精度乘法找错 C语言

#include<iostream>usingnamespacestd;intmain(){chara[10000],b[10000],t;inti,j,c[20001]... #include <iostream>
using namespace std;
int main ()
{
char a[10000],b[10000],t;
int i,j,c[20001]={0},q,w;
cin>>a>>b;q=strlen(a);w=strlen(b);
for (i=0;i<q/2;i++){t=a[i];a[i]=a[q-i-1];a[q-i-1]=t;}
for (i=0;i<w/2;i++){t=a[i];a[i]=a[w-i-1];a[w-i-1]=t;}
for (i=0;i<q;i++)
for (j=0;j<w;j++)
{
c[i+j]+=(a[i]-'0')*(b[j]-'0');
c[i+j+1]+=c[i+j]/10;
c[i+j]%=10;
}
i=20000;
while (c[i]==0) i--;
while (i>=0) cout<<c[i--];
while (1);
return 0;
}

能编译,但部分答案不对
展开
 我来答
pigoneand
2007-10-27
知道答主
回答量:14
采纳率:0%
帮助的人:19.3万
展开全部
仔细调试了一下

#include <iostream>
using namespace std;
int main ()
{
char a[10000],b[10000],t;
int i,j,c[20001]={0},q,w;
int lc;

cin>>a>>b;q=strlen(a);w=strlen(b);
for (i=0;i<q/2;i++){t=a[i];a[i]=a[q-i-1];a[q-i-1]=t;}
//原来下句是 for (i=0;i<w/2;i++){t=a[i];a[i]=a[w-i-1];a[w-i-1]=t;} 应该是交换b数组,可能粗心了
for (i=0;i<w/2;i++){t=b[i];b[i]=b[w-i-1];b[w-i-1]=t;}

//我令lc变量存储结果的长度
lc=q+w;

//先不管三七二十一,加起来
for (i=0;i<q;i++)
for (j=0;j<w;j++)
{
c[i+j]+=(a[i]-'0')*(b[j]-'0');
}

//考虑进位,最后一起考虑
for (i=0;i<lc;++i)
{
c[i+1]+=c[i]/10;
c[i]%=10;
}

//去除首位的0
while (c[lc]==0 && lc>0) lc--;

//输出结果
while (lc>=0) cout<<c[lc--];
cout<<endl;

system("pause");

return 0;
}

//现在应该就对了,我试过:)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式