超大数乘法的关键是如何对齐数据位的个数。这里引入乘积位数L、乘数位数I和被除数位数K,让l=i k-1来求解。程序如下:
//超大数乘法(超大数:超出计算机处理范围的整数)
# includesdio.h/*包含输入和输出功能*/
#include string.h /*包含字符串处理函数*/
#定义N 200 //常数N应大于数据的最大位数。
main()
{ char bc[N],cc[N];//定义字符串数组:被乘数字符串bc,乘数字符串cc
int b[N]={},c[N]={},j[N * 2]={ };//定义并初始化数组:被乘数B、乘数C和乘积j。
int x,I,k,lb,lc,l;//循环变量x,I,k;多人数字lb,乘数数字lc,产品数字l。
//输入:
Printf('请连续输入被乘数:');get(BC);
Printf('请连续输入乘数:');获取(cc);
//转换:
lb=strlen(BC);LC=strlen(cc);//测量字符串的长度
for(x=1;x=磅;x){ b[x]=BC[l B- x]-48;}//被乘数字符串转换为整数。
for(x=1;x=lcx){ c[x]=cc[LC-x]-48;}//乘数字符串转换为整数
//操作:
for(I=1;i=lcI) //乘数
{ for(k=1;k=lbK) //被乘数
{ l=k I-1;//定位(确定产品L的位数)
j[l]=b[k]* c[I];//相乘并累加最后一次进位
}
}
for(x=1;x=l;X) //回收:
{ j[x 1]=j[x]/10;j[x]%=10;//舍入和标准
}
if(j[l 1]=1)l;//处理首进位和总位数
//输出:
printf('%s*%s=',bc,cc);
for(x=l;x=1;x-)//从高到低
{ if(x%3==0x!=l) printf(',');//每3位数加一个','
printf('%d ',j[x]);//输出产品
}
}