此程序是用c语言利用数组来实现超出整形范围的长整数乘法运算,但出现了错误通不过编译,帮忙改正定重谢!

2025-01-05 17:21:38
推荐回答(1个)
回答1:

#include
void main()
{
int a[60]={0},b[60]={0},ia=0,ib=0,m,n,q,k=59,p[60][60]={0},d[60]={0},i;//将倒数的那个0加一个大括号;
int x=0,y=0,s=0,n1,m1;
char numa[60]={'\0'},numb[60]={'\0'};

printf("请输入一个数\n");
scanf("%s",numa);
for(ia=0;numa[ia]!='\0';ia++)
a[ia]=numa[ia]-48;
printf("请再输入一个数\n");
scanf("%s",numb);
for(ib=0;numb[ib]!='\0';ib++)
b[ib]=numb[ib]-48;

m=ia,n=ib; //两个数位数分别为m n//
ia--;
ib--;
for(;ib>=0;ib--)
{
ia=m-1;
for(;ia>=0;ia--)
{
q=b[ib]*a[ia];
if(q>=10)
{
p[ib][ia]+=q%10;
p[ib][ia-1]=q/10;//将b改为ib;
}
else {p[ib][ia]+=q; p[ib][ia-1]=p[ib][ia]/10;} //乘法第一步 两数各位分别想乘,并实现满十进一//
}
}

x=n-1,y=m-1;
for (;y>=0;y--)
{
n1=x,m1=y,s=0;
do
{
s=s+p[n1][m1];
n1--;
m1++;
}while(n1>=0);

d[k]=s;
k--;
}
x=n-1,y=0;
for(;x>=0;x--)
{
n1=x-1,m1=y,s=0;
do
{s=s+p[n1][m1];
n1--;
m1++;
}while(n1>=0);
d[k]=s;
k--;
}

k=59;
for(;k>=0;k--)
{
if(d[k]>9)
d[k-1]=d[k-1]+d[k]/10;
d[k]=d[k]%10;
}

i=0;
while(d[i]==0)
i++;
for(;i<=59;i++)
printf("%d",d[i]);
}
不仅有粗心的错误,思路也有错的地方,帮你改过来了,发到你邮箱里边了,采纳吧。