四:大數運算-乘法運算
阿新 • • 發佈:2017-12-29
pre gpo span tr1 tdi 大數 main sum pri
問題:大數-乘法運算
題目描述
請計算兩個整數相乘(數的範圍為: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 }
四:大數運算-乘法運算