大概就是图示的过程,关键在于:
1.逆序储存
2.将相同角标的c[i+j]相加,这一步需要多观察
3.进位
#include<stdio.h>
#include<string.h>
#include<math.h>
#define SIZE 1000
int main()
{
char s1[SIZE],s2[SIZE],s[SIZE];//分别是第一,第二以及最终的字符串
int a[SIZE],b[SIZE],c[SIZE];
int i,j,len1,len2;
memset(c,0,sizeof(c));//将c清空以便储存
scanf("%s",s1);
scanf("%s",s2);
len1 = strlen(s1);
len2 = strlen(s2);
int n = len1+len2;//最好的位数不会超过两者相加
for(i = 0;i<len1;i++)
a[i] = s1[len1-i-1]-'0';//将字符转化为数字倒序储存(因为算的时候从最后一个数字开始乘)
for(i = 0;i<len2;i++)
b[i] = s2[len2-i-1]-'0';
//开始乘法运算
for(j = 0;j<len2;j++)
for(i = 0;i<len1;i++)
{
c[i+j]+= b[j]*a[i];
}
//将每个c[i+j] 按十进制进位
for(i = 0;i<n;i++)
{
if(c[i]>=10)
{
c[i+1]+= c[i]/10;
c[i]%=10;
}
}
//将c[n]中多余的去掉(比如3位数与三位数相乘可能得到五位数而不是六位数)
while(c[n]==0)
n--;
for(i = 0;i<=n;i++)
{
s[i] = c[n-i]+'0';//不减1是因为c[n]是被赋了值的
printf("%c",s[i]);
}
printf("\n");
return 0;
}