精度计算---大数乘大数(数学问题)
input:输入两个大数
output:输出其结果
思路:
设置一个二维数组,和一个一维数组,将两个大数相乘对应的值存在二维数组中,然后相加,去摸得到最后一个值,存入一维数组中,
然后就是处理最后一个高位,记住进位!
代码:
1 #include <stdio.h> 2 #include <string.h> 3 4 void mult(char a[],char b[],char s[]){ 5 int i,j ,k = 0,alen,blen,sum=0,res[65][65]={0},flag=0; 6 char result[65]; 7 alen = strlen(a); 8 blen = strlen(b); 9 for(i=0;i<alen;i++) //最高六十五位 位数相乘,以二维数组的方式存储 10 for(j=0;j<blen;j++) 11 res[i][j] = (a[i]-'0')*(b[j]-'0');//res 存储这每一位的结果 12 13 for(i=alen-1;i>=0;i--){ //进位计算 ,大于10进位,然后将其余存在result【】数组中 14 for(j=blen-1;j>=0;j--) 15 sum = sum+res[i+blen-j-1][j]; 16 result[k]=sum%10;//result 存储这每一位的结果 17 k=k+1; 18 sum = sum/10;//将高位继续往上传 19 } 20 21 for(i=blen-2;i>=0;i--){ // 将每位加起来,然胡放到sum,将个位存在result中 22 for(j=0;j<=i;j++) 23 sum = sum+res[i-j][j]; 24 result[k] = sum%10; 25 k=k+1; 26 sum=sum/10; 27 } 28 29 if(sum!=0){ //处理最后一位 30 result[k] =sum; 31 k=k+1; 32 } 33 34 for(i=0;i<k;i++) 35 result[i] +='0'; 36 37 for(i=k-1;i>=0;i--) //将结果传值给s中 38 s[i] =result[k-1-i]; 39 40 s[k] = '\0'; 41 42 while(1){ 43 if(strlen(s)!=strlen(a) && s[0] == '0') 44 strcpy(s,s+1); 45 else 46 break; 47 } 48 49 } 50 51 int main(){ 52 char s1[100]={0},s2[100]={0},output[200]={0}; 53 scanf("%s %s",s1,s2); 54 mult(s1,s2,output); 55 printf("the result is %s\n",output); 56 return 0; 57 }
浙公网安备 33010602011771号