精度计算---乘法(大数乘小数)(数学问题)
input: 大数 c,小数m(限10以内)
output:两数相乘的结果s
思路:
利用数组,将大数位数存储下来,然后通过最小位乘以大数由低到高位的数,然后存入一个新的数组,但是一个点需要注意,最后的最高位,可能大于10,所以记得
结束的时候需要再判断一下最高位,并存储。
代码:
1 #include <stdio.h> 2 #include <string.h> 3 4 /* 5 char c[] input the big digital 6 int m input the small digital 7 char t[] output the result 8 */ 9 10 void mult(char c[],char t[],int m){ 11 int i,l,k,flag,add = 0; 12 char s[100]; 13 l = strlen(c); 14 for(i = 0;i<l;i++) 15 s[l-i-1] = c[i] - '0'; //将大数倒置,存入数组s中 16 for(i=0;i<l;i++){ // 通过从最低位与m相乘得到最低位,然后将个位存在相应数组,其他书进位,放到add中 17 k = s[i]*m+add; 18 if(k >= 10){ 19 s[i]=k%10; 20 add =k/10; 21 flag =1; 22 } 23 else{ 24 s[i] = k; 25 flag = 0; 26 add = 0; 27 } 28 29 } 30 if(flag){ // 最高位如果大于十,则将其进位 31 l = i+1; 32 s[i] = add; 33 } 34 else l = i; 35 for(i=0;i<l;i++) // 然后将其位置换回来 36 t[l-1-i] = s[i]+'0'; 37 t[l]='\0'; 38 39 } 40 41 int main(){ 42 char input[100]={0},output[100]={0}; 43 int c; 44 // memset(input,0,sizeof(input)); 45 // memset(output) 46 scanf("%s %d",input,&c); 47 mult(input,output,c); 48 printf("the result is %s\n",output); 49 return 0; 50 }
浙公网安备 33010602011771号