洛谷 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 } `
原文地址:https://www.cnblogs.com/TheZealous/p/14289474.html