标签:
大数乘法,注意注释部分:
1 #include<stdio.h> 2 3 void multiple(char a[],char b[],char c[]){ 4 int temp,in=0,lenA=0,lenB=0,index,start; 5 while(a[++lenA]!=‘\0‘);//求字符数组的最高位,以方便做乘法 ,如果lenA++,则下面对应的不是lenA-1,而是lenA-2 6 while(b[++lenB]!=‘\0‘); 7 start = lenA+lenB-1; 8 for(int i=lenA-1;i>=0;i--){ 9 index=start--; //做乘法时需要往前移位 10 for(int j=lenB-1;j>=0;j--){ 11 // printf("a[%d]=%c b[%d]=%c\n",i,a[i],j,b[j]); 12 temp = c[index]-‘0‘+(a[i]-‘0‘)*(b[j]-‘0‘)+in; 13 c[index--]=temp%10+‘0‘; 14 in = temp/10; 15 } 16 c[index]=in+‘0‘; //最高位需要保留 17 } 18 } 19 20 int main(){ 21 char a[]="123567890"; 22 char b[]="123567890"; 23 char c[sizeof(a)+sizeof(b)-1]; 24 for(int i=0;i<sizeof(c);i++) 25 c[i]=‘0‘; 26 c[sizeof(c)-1]=‘\0‘; 27 multiple(a,b,c); 28 if(c[0]!=‘0‘) 29 printf("%c",c[0]); 30 for(int i=1;c[i]!=‘\0‘;i++){ 31 printf("%c",c[i]); 32 } 33 }
标签:
原文地址:http://www.cnblogs.com/hoojjack/p/4768015.html