<span style="font-size:32px;">高精度乘法运算</span>
题目描述:
给定两个位数不超过100位的正整数,求它们的乘积。
输入描述:
输入文件中包含多个测试数据。每个测试数据占两行,分别为一个正整数,
每个正整数的位数不超过100位。输入数据一直到文件尾。
输出描述:
对输入文件中的每个测试数据,输出其中两个正整数的乘积。
样例输入:
981567
32976201
123456789
987654321
123456789987654321
987654321123456789
样例输出:
32368350686967
121932631112635269
121932632103337905662094193112635269
源代码:
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string>
#include <algorithm>
#include <string.h>
using namespace std;
string BigMul(string s,string t){
int sum[10005] = {0},a[10005],b[10005],tmp,extra,i,j,start,length1,length2;
char goal[10005];
reverse(s.begin(),s.end());
reverse(t.begin(),t.end());
length1 = s.length();
length2 = t.length();
for(i = 0;i < length1;i++){
a[i] = (int)(s[i] - '0');
}
for(i = 0;i < length2;i++){
b[i] = (int)(t[i] - '0');
}
for(i = 0;i < length1;i++){
start = i;
for(j = 0;j < length2;j++){
sum[start] += a[i]*b[j];
start ++;
}
}
for(i = 0;i < start;i++){
sum[i + 1] += sum[i] / 10;
sum[i] = sum[i] % 10;
}
while(sum[i] == 0){
i --;
}
start = 0;
for(j = i ;j >= 0;j--){
goal[start] = (char)(sum[j] + '0');
start ++;
}
goal[start] = '\0';
return (string)goal;
}
int main(){
freopen("in.txt","r",stdin);
string s,t;
while(cin>>s>>t){
//cout<<s<<" "<<t<<endl;
cout<<BigMul(s,t)<<endl;
}
}