7-9 高精度乘法 (10 分)
输入两个高精度正整数M和N(M和N均小于100位)。求这两个高精度数的积。
输入格式:
输入两个高精度正整数M和N。
输出格式:
求这两个高精度数的积
输入样例:
5 7
输出样例:
35
作者
严华云
单位
湖州师范学院
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
#include<stdio.h>
#include<string.h>
using namespace std;
int main(){
char M[101];
char N[101];
int sum[200][200]={0};
int result[200]={0};
scanf("%s",M);
scanf("%s",N);
int len1=strlen(M);
int len2=strlen(N);
//printf("%d %d",len1,len2);
int offset=len1-1;
int jinwei=0;
for(int i=len1-1;i>=0;i--){
int j=0;
for(j=len2-1;j>=0;j--){
sum[i][j+1+offset]=((M[i]-'0')*(N[j]-'0')+jinwei)%10;
//printf("%d ",sum[i][j]);
jinwei=(((M[i]-'0')*(N[j]-'0')+jinwei)/10);
}
sum[i][j+1+offset]=jinwei;
//printf("%d",jinwei);
jinwei=0;
//offset++;
//printf("\n");
offset--;
}
int flag=0;
for(int i=199;i>=0;i--){
int sum2=0;
for(int j=199;j>=0;j--){
//printf("%d",sum[i][j]);
sum2+=sum[j][i];
//printf("%d",sum[i][j]);
}
if(sum2!=0&&flag==0){
//printf("%d ",sum2);
flag=i;
}
result[i]=(sum2+jinwei)%10;
jinwei=(sum2+jinwei)/10;
//printf("\n");
}
int num;
// for(int i=len1+len2;i>=0;i--){
// if(result[i]==0&&flag==0){
// continue;
// }
// else if(result[i]!=0){
// num=i;
// break;
// }
// }
int flag0=0;
for(int i=len2-1;i>=0;i--){
if(N[i]=='0'){
flag0++;
}
else{
break;
}
}
for(int i=len1-1;i>=0;i--){
if(M[i]=='0'){
flag0++;
}
else{
break;
}
}
for(int i=0;i<=flag+flag0;i++){
if(i==0&&result[i]==0){
continue;
}
printf("%d",result[i]);
}
}