L老师讲解的大数问题 - 2013.5.20
发布时间:2020-12-14 03:53:33 所属栏目:大数据 来源:网络整理
导读:模板来自吉林大学acm模板及网络。 老师均添加了一些注释及改进。 第一个,普通的大数运算: 1 #include stdio.h 2 #include string .h 3 /* ==================================================* 4 | 普通的大数运算 5 *================================
模板来自吉林大学acm模板及网络。 老师均添加了一些注释及改进。 第一个,普通的大数运算: 1 #include <stdio.h> 2 #include <string.h> 3 /*==================================================* 4 | 普通的大数运算 5 *==================================================*/ 6 const int MAXSIZE = 200; 7 void Add(char *str1,char *str2,char *str3); 8 //str3: 和 9 void Minus(char *str1,char *str3); 10 //要求 str1表示的数比str2的大 11 void Mul(char *str1,char *str3); 12 //str3: 乘积 13 void Div(char *str1,char *str3,char *str4); 14 //str3:商 str4:余数 15 //增加str4,by lyh:13/5/19 16 int main(void) 17 { 18 char str1[MAXSIZE],str2[MAXSIZE],str3[MAXSIZE],str4[MAXSIZE]; 19 while( scanf("%s %s",str1,str2) == 2 ) 20 { 21 if( strcmp(str1,"0") ) 22 { 23 memset(str3,'0',sizeof(str3)); // !!!!! 24 Add(str1,str2,str3); 25 printf("Add:%sn",str3); 26 memset(str3,sizeof(str3)); 27 Minus(str1,str3); 28 printf("Minus:%sn",str3); 29 memset(str3,sizeof(str3)); 30 Mul(str1,str3); 31 printf("Mul:%sn",str3); 32 if (strcmp(str2,"0")) 33 {//第二个数不为0 34 memset(str3,sizeof(str3)); 35 memset(str4,sizeof(str4)); 36 Div(str1,str3,str4); 37 printf("Div:%st%sn",str4); 38 } 39 } 40 else //第一个数为0的处理 41 { 42 if( strcmp(str2,"0") ) 43 printf("%sn-%sn0n0t0n",str2); 44 else //两个数都为0的处理 45 printf("0n0n0n0t0n"); 46 } 47 } 48 return 0; 49 } 50 void Add(char *str1,char *str3) 51 { 52 // str3 = str1 + str2; 53 int i,j,i1,i2,tmp,carry; 54 int len1 = strlen(str1),len2 = strlen(str2); 55 char ch; 56 i1 = len1-1; 57 i2 = len2-1; 58 j = carry = 0; 59 for( ; i1 >= 0 && i2 >= 0; ++j,--i1,--i2 ) 60 { 61 tmp = str1[i1]-'0'+str2[i2]-'0'+carry; 62 carry = tmp/10; 63 str3[j] = tmp%10+'0'; 64 } 65 while( i1 >= 0 ) 66 { 67 //处理剩余加数1 68 tmp = str1[i1--]-'0'+carry; 69 carry = tmp/10; 70 str3[j++] = tmp%10+'0'; 71 } 72 while( i2 >= 0 ) 73 { 74 //处理剩余加数2 75 tmp = str2[i2--]-'0'+carry; 76 carry = tmp/10; 77 str3[j++] = tmp%10+'0'; 78 } 79 if( carry ) //最高位进位 80 str3[j++] = carry+'0'; 81 str3[j] = ' |