题目VJ上的链接:https://vjudge.net/problem/UVA-10106
参考博客:https://www.cnblogs.com/wuqianling/p/5387099.html
思路:1:先把每位的乘的结果得出。2:进位最后统一进。
1:第一位数字的i位和第二位数字的j位相乘得到的一定是在结果的i+j位上(几位是原数字的从右往左开始数,从0开始)
sum[i+j]=a[i]*b[j];
2:简单的进位
1 #include<stdio.h> 2 #include<string.h> 3 char a[1000]; 4 char b[1000]; 5 int a1[1000]; 6 int b1[1000]; 7 int sum[1000*2]; 8 void multiply(char a[],char b[]) 9 { 10 memset(a1,0,sizeof(a1)); 11 memset(b1,0,sizeof(b1)); 12 memset(sum,0,sizeof(sum)); 13 int len=strlen(a); 14 for (int i=0,j=len-1;j>=0;j--)//转化为数组 15 { 16 a1[i++]=a[j]-'0'; 17 } 18 int len1=strlen(b); 19 for (int i=0,j=len1-1;j>=0;j--)//转化为数组 20 { 21 b1[i++]=b[j]-'0'; 22 } 23 for(int i=0;i<len;i++)//1:计算相乘 24 for (int j=0;j<len1;j++) 25 { 26 sum[i+j]+=a1[i]*b1[j]; 27 } 28 for (int i=0;i<len+len1+100;i++)//2:统一进位 29 { 30 if(sum[i]>=10) 31 { 32 sum[i+1]+=sum[i]/10; 33 sum[i]=sum[i]%10; 34 } 35 } 36 int flag=0; 37 for(int i=len+len1+100;i>=0;i--)//跳过高位0 38 { 39 if(sum[i]!=0&&flag==0) 40 { 41 flag=1; 42 } 43 if(flag!=0) 44 { 45 flag=i;break; 46 } 47 } 48 for(int i=flag;i>=0;i--)//输出 49 { 50 printf("%d",sum[i]); 51 } 52 printf("\n"); 53 } 54 int main() 55 { 56 while (scanf("%s%s",a,b)!=EOF) 57 { 58 multiply(a,b); 59 } 60 return 0; 61 }