四:大数运算-乘法运算

Posted 玉汝于成

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了四:大数运算-乘法运算相关的知识,希望对你有一定的参考价值。

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

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

  1 #include<stdio.h>
  2 #include<string.h>
  3 #define M 1000000
  4 int Inter_Sum[M];
  5 int Inter_jie[M];
  6 int g;
  7 //char Inter_Char[M];
  8 void fun(int str1[],int str[],int s,int p){
  9     int t,m=0,i=0,two=0;
 10     int k=0;
 11     /*printf("1\n");
 12     for( int j=s-1;j>=0;j--){
 13             
 14         printf("%d ",str1[j]);
 15     }
 16     printf("\n");
 17     printf("2\n");
 18         for( int j=p;j>=0;j--){
 19         printf("%d ",str[j]);
 20     }
 21     printf("\n");*/
 22     while(i<s){
 23             if(two<=p)
 24          t=(str1[i])+(str[two])+m;
 25          
 26          else {
 27              t=(str1[i])+m;
 28          }
 29          //printf("t=%d i=%d two=%d\n",t,i,two);
 30          //printf("str1[i]=%d str[two]=%d\n",str1[i],str[two]);
 31         if(t<10){
 32             Inter_Sum[k]=t;
 33             m=0;
 34         }else{
 35             Inter_Sum[k]=t%10;
 36             m=t/10;
 37         }    
 38         k++;
 39         two++;
 40         if(i==s-1&&m!=0)Inter_Sum[k++]=m; 
 41         i++;
 42     }
 43     
 44     //printf("\n");
 45     g=k;
 46 }
 47 void f(char str1[],char str2[]){
 48     int t,p=0,i=strlen(str1);
 49     //int Inter_jie[10000][10000];
 50     memset(Inter_Sum,-1,sizeof(Inter_Sum));
 51     int k,j,l;
 52     int index=0;
 53     while(1){
 54         for(k=strlen(str2)-1;k>=0;k--){
 55             int m=0;
 56             int p=strlen(str2)-1-k;
 57             //printf("str2[k]=%d\n",str2[k]-48);
 58             l=p;
 59             //printf("l=%d\n",l);
 60             while(l--)Inter_jie[l]=0;
 61             for(j=strlen(str1)-1;j>=0;j--){
 62                 t=(str1[j]-48)*(str2[k]-48)+m;
 63                 //printf("t=%d\n",t);
 64                 if(t<10){
 65                     Inter_jie[p]=t;
 66                     m=0;
 67                 }else{
 68                     Inter_jie[p]=t%10;
 69                     m=t/10;
 70                 }
 71                 //printf("t=%d\n",t);
 72                 p++;
 73                 if(j==0&&m!=0)Inter_jie[p++]=m; 
 74             }
 75         
 76         /*for( int j=p-1;j>=0;j--){
 77             
 78         printf("%d ",Inter_jie[j]);
 79     }
 80     printf("\n");*/
 81             while(Inter_Sum[index++]!=-1);
 82             fun(Inter_jie,Inter_Sum,p,index-2);
 83             //printf("index=%d\n",index);
 84         }
 85         //printf("p=%d\n",p);
 86         break;
 87     }
 88     //printf("index=%d\n",index);
 89     
 90 }
 91 int main(){
 92     
 93     char str1[M];
 94     char str2[M];
 95     //memset(Inter_Sum,0,sizeof(Inter_Sum));
 96     int i=0,j=0;
 97     scanf("%s %s",str1,str2);
 98     str1[strlen(str1)]=\0;
 99     str2[strlen(str2)]=\0;
100     //printf("%d %d\n",strlen(str1),strlen(str2));
101     if(strlen(str1)>=strlen(str2))
102     f(str1,str2);
103     else f(str2,str1);
104     for(j=g-1;j>=0;j--){
105         printf("%d",Inter_Sum[j]);
106     }
107     return 0;
108 }

 

以上是关于四:大数运算-乘法运算的主要内容,如果未能解决你的问题,请参考以下文章

大数乘法取模运算(二进制)

大数运算

大数运算——大数乘法

(转)大数运算——大数乘法

大数高精度运算(模板)

大数运算