基本思路
①每次乘数的一位与被乘数相乘的个位结果在最终结果中都不变,所以每次个位数直接用数组记录下来
②根据对乘法竖式的理解,每两个惩罚结果(eg:被乘数的个位和十位分别与乘数相乘的结果加和,十位的相乘结果会比个位的要前移一位)这时,可以想成是上面的数去掉末位(eg:b/=10;)与下一个乘法结果相加,这样就符合加法的正常思路。
#include<stdio.h>
#include<string.h>
int main()
{
long b,c,d;
int a[256],i,j,n;
char s1[256];
printf("Input a great number:");
scanf("%s",s1);//作为乘数
printf("Input a long Intiger:");
scanf("%d",&c);//作为被乘数
n=strlen(s1);
d=0;//表示进位,从0开始(一开始还没有进位)
//取出所有中间计算结果的个位
for(i=0,j=n-1;i<n;i++,j--){
b=(s1[j]-'0')*c+d;
a[i]=b%10;
d=b/10;
}
//排除所有中间乘法个位后的整数
while(d!=0){
a[n]=d%10;
d/=10;
n++;
}
//逆序输出
for(i=n-1;i>=0;i--){
printf("%d",a[i]);
}
return 0;
}