大数相加, 大数相乘
2011-01-04 18:36
411 查看
没怎么测试, 有BUG请提出, 注意加法时参数1要大于等于参数2, 乘法无限制
#include <stdio.h> #include <string.h> #include <malloc.h> //len1 >= len2 char *Add(const char *param1, const char *param2, int len1, int len2) { int i = 0; int j = 0; char *res = (char*)malloc((len1+2)*sizeof(char)); memset(res, 0, len1+2); for (i=len1-1; i>=0; --i) res[i+1] += param1[i] - 0x30; for (i=len1, j=len2-1; j>=0; --j, --i) { res[i] += param2[j] - 0x30; if (res[i] > 9) { res[i-1] += 1; res[i] -= 10; } } if (res[1] > 9) { res[0] += 1; res[1] -= 10; } for (i=0; i<=len1; ++i) res[i] += 0x30; if (res[0] == 0x30) for (i=0; res[i]!='/0'; ++i) res[i] = res[i+1]; return res; } //no limit while len1>len2 or len1<len2 char *Multi(char *param1, char *param2, int len1, int len2) { char *res = (char*)malloc((len1+len2+1)*sizeof(char)); memset(res, 0, (len1+len2+1)*sizeof(char)); int i = 0; int j = 0; int k = 0; int m = 0; int n = 0; for (i=len1-1, k=len1+len2-1; i>=0; --i, --k) { m = k; for (j=len2-1; j>=0; --j) { res[m] += (param1[i] - 0x30) * (param2[j] - 0x30); n = res[m]/10; if (n > 0) { res[m-1] += n; res[m] -=10*n; } --m; } } for (i=0; i<=len1+len2-1; ++i) res[i] += 0x30; if (res[0] == 0x30) for (i=0; res[i]!='/0'; ++i) res[i] = res[i+1]; return res; } int main() { char ch1 = '4'; char ch2 = '7'; char ch3 = ch1 - 0x30 + ch2 - 0x30; printf("%c, %c, %d,/n", ch1, ch2, ch3);//打出a对应的ascii码 printf("----------/n"); char param1[100] = "9999"; char param2[100] = "999"; int len1 = strlen(param1); int len2 = strlen(param2); printf("%s, %s/n", Add(param1, param2, len1, len2), Multi(param1, param2, len1, len2)); return 0; }