Davenny:~我今天該吃點什麼捏~
阿新 • • 發佈:2019-01-06
Description
輸入兩個高精度整數M和N(M和N均不小於0且不超過100位)。求這兩個高精度數的積。
Input
每一組測試資料佔2行,一行一個整數
Output
每一組測試資料輸出佔一行,輸出乘積
Sample Input
36 3
Sample Output
108
思路:
模擬乘法。
第i號數相當於其後有i個零,第j號數相當於其後有j個零,所以乘出來的結果中有i+j個零,即存入i+j號位置。
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
const int maxn=209;
char x[maxn],y[maxn];
int a[maxn],b[maxn],c[2*maxn+22];//注意積的位數和乘數位數之間的關係
int main()
{
while(cin>>x>>y)
{
int len1=strlen(x),len2=strlen(y);
memset(a,0,sizeof a);
memset(b,0,sizeof b);
memset(c,0,sizeof c);
for (int i=len1-1,j=0; i>=0; i--,j++) a[j]=x[i]-'0';
for(int i=len2-1,j=0; i>=0; i--,j++) b[j]=y[i]-'0';
for(int i=0; i<len1; i++)
for(int j=0; j<len2; j++)//模擬乘法將兩個數的每一位均和對方相乘,存入對應的結果中。
c[i+j]+=a[i]*b[j];//第i號數相當於其後有i個零,第j號數相當於其後有j個零,所以乘出來的結果中有i+j個零,即存入i+j號位置
int i;
for(i=0; i<2*maxn; i++)//處理進位問題
{
c[i+1]+=c[i]/10;
c[i]%=10;
}
while(c[i]==0) i--;
if(i<0) cout<<"0";
for(; i>=0; i--)
cout<<c[i];
cout<<endl;
}
return 0;
}