当前位置: 代码迷 >> 综合 >> HAUT OJ 1357: 午饭问题(一)--高精度乘法
  详细解决方案

HAUT OJ 1357: 午饭问题(一)--高精度乘法

热度:15   发布时间:2023-12-04 03:25:17.0

问题描述:

   12点又到了,该吃午饭了,小C 瘫在床上不想起床,小A 不想惯着他,于是给他说:“小C,你上星期不是做出了choice 学姐的加法,现在你能做出 choice 学姐的乘法,我就给你带饭。”你能不能帮帮小C。

输入:

  两个整数 A 和 B,A和B的长度l(0 <= l <= 1000)。

输出:

多实例测试,输出 A*B 的结果。

样例输入:

4038
5255
55718
7221
8160
104906
3511906
8767574

样例输出:

21219690
402339678
856032960
30790895736044

原因分析:

1.创建三个int 数组,初始化为0,记录长度,将字符串里的每个数存进数组单元里(倒着输入)

2. 每位数相乘,     c[i+j-1] =a[i]*b[j];        c[i+j]+=c[i+j-1]/10;  不要漏 +

3.删除前导0
              


解决方案:


#include<bits/stdc++.h>
using namespace std;
#define endl "\n"
long long a[1000005];
int main(void)
{ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);string str1,str2;while(cin>>str1>>str2){int a[2000],b[2000],c[5000],i,j,len;memset(a,0,sizeof(a));memset(b,0,sizeof(b));memset(c,0,sizeof(c));a[0]=str1.length();b[0]=str2.length();for(i=1;i<=a[0];i++)a[i]=str1[a[0]-i]-'0';for(i=1;i<=b[0];i++)b[i]=str2[b[0]-i]-'0';for(i=1;i<=a[0];i++)for(j=1;j<=b[0];j++){c[i+j-1]+=a[i]*b[j];c[i+j]+=c[i+j-1]/10;c[i+j-1]%=10;}len=a[0]+b[0]+1;while(len>1&&c[len]==0)len--;for(i=len;i>=1;i--)cout<<c[i];cout<<endl;}return 0;
}