-->
当前位置:首页 > 题库 > 正文内容

7-9 高精度乘法 (10 分)

Luz4年前 (2021-03-05)题库1577
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]);
	 }
	 
}


发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。