/*大數整數乘法方法*/ #include<stdio.h> #include<stdlib.h> #include<string.h> char * bigmuilty(char*muiltied,int len1,char *muilty,int len2)//muiltied 為被乘數,len1為其長。muilty為乘數,len2為其長 { int len; int i=0; int j=0; int k=0; int tmp_result=0; int carry=0; char* result; len=len1+len2; //兩個數相乘他們的最大長度為乘數與被乘數的長度和 result=(char*)calloc(len,1);//動態分配內存 for(i=0;i<len2;i++)//用乘數的每一位去乘以被乘數 { for(j=0;j<len1;j++) { tmp_result=muilty[len2-i-1]*muiltied[len1-j-1];//得到零時結果 result[j+i]+=tmp_result;//如果以0為起始標號,被乘數和乘數下標分別從右往左依次增加,則結果存放的位置為j+i } for(k=0;k<=j+i-1;k++)//整理結果,使每位的值在0-9之間 { if(result[k]>9) { carry=result[k]/10; result[k]=result[k]%10; result[k+1]+=carry; } } } return result; } int main() { int len1=0; int len2=0; int len; int i=0; int num='0'; char *result; char muiltied[BUFSIZ];//被乘數存放位置 char muilty[BUFSIZ]; printf("entry muiltied : "); scanf("%s",muiltied); printf("\nentry muilty : "); scanf("%s",muilty); len1=strlen(muiltied); len2=strlen(muilty); len=len1+len2; for(i=0;i<len1;i++) { muiltied[i]=muiltied[i]-num; } for(i=0;i<len2;i++) { muilty[i]=muilty[i]-num; } result=bigmuilty(muiltied,len1,muilty,len2); i=len-2; printf("\nresult : "); if(result[len-1]>0) { printf("%c",result[len-1]+num); } while(i>=0) { printf("%c",result[i]+num); i--; } printf("\n"); free(result); return 0; }