1. 程式人生 > >Davenny:~我今天該吃點什麼捏~

Davenny:~我今天該吃點什麼捏~

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; }