大数问题:用字符串解决大数相加和相乘
2014-03-09 21:24
483 查看
1、加法:
2、乘法:
// assume m is bigger than n. char* add(char *a, char *b, int m, int n) { // 为结果分配内存空间。 char *c = (char*)malloc((m + 2)* sizeof(char)); memset(c, 0, (m + 2) * sizeof(char)); // 将字符(0 + 0x30 到 9 + 0x30)转换为数字(0到9)进行计算。 for (int i = m, j = n - 1; j >= 0; --i, --j) c[i] += (b[j] - 0x30); for (int i = m, j = m - 1; j >= 0; --i, --j) { c[i] += (a[j] - 0x30); if (c[i] > 9) { c[i - 1] += 1; c[i] -= 10; } } // 将由纯数字组成的结果转换为字符串,并去除首部可能还存在的零。 c[m + 1] = '/0'; for (int i = 0; i != m + 1; ++i) c[i] += 0x30; if (c[0] == 0x30) for (int i = 0; c[i] != '/0'; ++i) c[i] = c[i + 1]; // 返回结果所在内存单元的首地址。 return c; }
2、乘法:
// assume m is bigger than n. char* mult(char *a, char *b, int m, int n) { // 为结果分配内存空间。 char *c = (char*)malloc((m + n + 1) * sizeof(char)); memset(c, 0, (m + n + 1) * sizeof(char)); // 将字符(0 + 0x30 到 9 + 0x30)转换为数字(0到9)进行计算。 for (int i = m - 1, r = m + n - 1; i >= 0; --i, --r) { for (int j = n - 1, k = r; j >= 0; --j, --k) { c[k] += (a[i] - 0x30) * (b[j] - 0x30); int tmp = c[k] / 10; if (tmp > 1) { c[k - 1] += tmp; c[k] -= tmp * 10; } } } // 将由纯数字组成的结果转换为字符串,并去除首部可能还存在的零。 c[m + n] = '/0'; for (int i = 0; i != m + n; ++i) c[i] += 0x30; if (c[0] == 0x30) for (int i = 0; c[i] != '/0'; ++i) c[i] = c[i + 1]; // 返回结果所在内存单元的首地址。 return c; }
相关文章推荐
- 大数问题:用字符串解决大数相加和相乘(转载)
- 大数问题:用字符串解决大数相加和相乘。【转】
- 大数问题:用字符串解决大数相加和相乘
- 大数问题:用字符串解决大数相加和相乘。
- 大数问题:用字符串解决大数相加和相乘
- 用字符串解决大数问题
- 用字符串解决大数问题
- 字符串系列之相加(发现问题,解决问题)
- 字符串大数相加和相乘
- 高精度问题之大数相加(原来就是用字符串相加,模拟手算这么简单!)
- 大数相乘解决办法,用字符串表示的大数
- 利用堆栈解决大数相加问题
- [置顶] 大数字符串形式相加和相乘
- 多项大数相乘后果不可预知性的问题所在!
- Java中substring的妙用,解决字符串提取的问题
- 解决 @ResponseBody返回字符串乱码问题
- Oracle解决单表字符串日期自动更新问题
- 解决Spring MVC @ResponseBody返回中文字符串乱码问题
- 利用动态规划解决交叉字符串问题
- 正则表达式匹配不包含特定字符串解决匹配溢出问题