四:大数运算-乘法运算

问题:大数-乘法运算
题目描述

请计算两个整数相乘(数的范围为:0 <= num < 10 ^ 100)
输入
两个整数
输出
一个整数
样例输入
10000000
10000000
样例输出
100000000000000

#include<stdio.h>
#include<string.h>
#define M 1000000
int Inter_Sum[M];
int Inter_jie[M];
int g;
//char Inter_Char[M];
void fun(int str1[],int str[],int s,int p){
    int t,m=0,i=0,two=0;
    int k=0;
    /*printf("1\n");
    for( int j=s-1;j>=0;j--){
            
        printf("%d ",str1[j]);
    }
    printf("\n");
    printf("2\n");
        for( int j=p;j>=0;j--){
        printf("%d ",str[j]);
    }
    printf("\n");*/
    while(i<s){
            if(two<=p)
         t=(str1[i])+(str[two])+m;
         
         else {
         	t=(str1[i])+m;
         }
         //printf("t=%d i=%d two=%d\n",t,i,two);
         //printf("str1[i]=%d str[two]=%d\n",str1[i],str[two]);
        if(t<10){
            Inter_Sum[k]=t;
            m=0;
        }else{
            Inter_Sum[k]=t%10;
            m=t/10;
        }	
        k++;
        two++;
        if(i==s-1&&m!=0)Inter_Sum[k++]=m; 
        i++;
    }
    
    //printf("\n");
    g=k;
}
void f(char str1[],char str2[]){
    int t,p=0,i=strlen(str1);
    //int Inter_jie[10000][10000];
    memset(Inter_Sum,-1,sizeof(Inter_Sum));
    int k,j,l;
    int index=0;
    while(1){
        for(k=strlen(str2)-1;k>=0;k--){
            int m=0;
            int p=strlen(str2)-1-k;
            //printf("str2[k]=%d\n",str2[k]-48);
            l=p;
            //printf("l=%d\n",l);
            while(l--)Inter_jie[l]=0;
            for(j=strlen(str1)-1;j>=0;j--){
                t=(str1[j]-48)*(str2[k]-48)+m;
                //printf("t=%d\n",t);
                if(t<10){
                    Inter_jie[p]=t;
                    m=0;
                }else{
                    Inter_jie[p]=t%10;
                    m=t/10;
                }
                //printf("t=%d\n",t);
                p++;
                if(j==0&&m!=0)Inter_jie[p++]=m; 
            }
        
        /*for( int j=p-1;j>=0;j--){
            
        printf("%d ",Inter_jie[j]);
    }
    printf("\n");*/
            while(Inter_Sum[index++]!=-1);
            fun(Inter_jie,Inter_Sum,p,index-2);
            //printf("index=%d\n",index);
        }
        //printf("p=%d\n",p);
        break;
    }
    //printf("index=%d\n",index);
    
}
int main(){
    
    char str1[M];
    char str2[M];
    //memset(Inter_Sum,0,sizeof(Inter_Sum));
    int i=0,j=0;
    scanf("%s %s",str1,str2);
    str1[strlen(str1)]='\0';
    str2[strlen(str2)]='\0';
    //printf("%d %d\n",strlen(str1),strlen(str2));
    if(strlen(str1)>=strlen(str2))
    f(str1,str2);
    else f(str2,str1);
    for(j=g-1;j>=0;j--){
        printf("%d",Inter_Sum[j]);
    }
    return 0;
}

    原文作者:大整数乘法问题
    原文地址: https://blog.csdn.net/yuming226/article/details/78917030
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞