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