洛谷 P1303 A*B Problem
【题目描述】
求两数的积。
【输入格式】
两行,两个整数。
【输出格式】
一行一个整数表示乘积。
【输入输出样例】
输入 1 2
输出 2
【说明/提示】
每个数字不超过 10^2000,需用高精。
【代码实现】
1 #include<bits/stdc++.h> 2 3 using namespace std; 4 5 char a[1000001],b[1000001]; 6 7 long long la,lb,lc,sa[10000001],sb[1000001],sc[1000001]; 8 9 long long jw,w,h,m; 10 11 int main() { 12 13 scanf("%s",a); 14 15 scanf("%s",b); 16 17 la=strlen(a); 18 19 lb=strlen(b); 20 21 memset(sa,0,sizeof(sa)); 22 23 memset(sb,0,sizeof(sb)); 24 25 for(int i=0;i<la;i++) 26 27 { 28 29 sa[la-i-1]=a[i]-'0';//to"-1"or not to? 30 31 } 32 33 for(int i=0;i<lb;i++) 34 35 { 36 37 sb[lb-i-1]=b[i]-'0'; 38 39 } 40 41 memset(sc,0,sizeof(sc)); 42 43 jw=0; 44 45 for(int i=0;i<la;i++) 46 47 { 48 49 for(int j=0;j<lb;j++) 50 51 { 52 53 w=sa[i]*sb[j]; 54 55 jw=w/10; 56 57 w%=10; 58 59 m=i+j; 60 61 sc[m]=sc[m]+w; 62 63 sc[m+1]=sc[m+1]+jw+sc[m]/10;//to be added "sc[m]/10" 64 65 sc[m]%=10;//This is the wrong place 66 67 } 68 69 } 70 71 lc=la+lb; 72 73 while(sc[lc]==0&&lc>0)//去掉首位的零,原先首位0部分数据未去 ,注意符号 ;>0. 74 75 { 76 77 lc--; 78 79 } 80 81 if(lc<=0) 82 83 { 84 85 printf("0\n"); 86 87 } 88 89 else 90 91 { 92 93 for(int i=lc;i>=0;i--)//>= !!! 94 95 { 96 97 printf("%d",sc[i]); 98 99 } 100 101 } 102 103 return 0; 104 105 } `