高精度乘法找错 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;
}
能编译,但部分答案不对 展开
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;
}
能编译,但部分答案不对 展开
展开全部
仔细调试了一下
#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;
}
//现在应该就对了,我试过:)
#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;
}
//现在应该就对了,我试过:)
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询