大整数加减法
2015-03-06 17:21
197 查看
#include <stdio.h> #include <stdlib.h> #include <string.h> void swap(char* a, char* b) { char tmp = *a; *a = *b; *b = tmp; } void reverse(char* a, int low, int high) { while (low < high) { swap(&a[low], &a[high]); low++; high--; } } char* addition(char* a, char* b) { int n = strlen(a); int m = strlen(b); int len = n>m ? n:m; int i = 0; int flag = 0; int a1; int b1; char* c; int sum; reverse(a, 0, n-1); reverse(b, 0, m-1); /*多分配一个字节*/ c = (char*)malloc(len+2); while (i < len) { a1 = i<n ? (a[i]-'0'):0; b1 = i<m ? (b[i]-'0'):0; sum = (a1+b1+flag)%10; flag = (a1+b1+flag)/10; c[i] = sum+'0'; i++; } if (flag == 1) { c[i++] = '1'; } c[i] = '\0'; reverse(c, 0, i-1); return c; } int rmBlankZero(char* c, int n) { int i = n-1; /*保证至少有一个0*/ while (i>0 && c[i]=='0') i--; return i+1; } /*只处理A > B*/ char* subtraction(char* a, char* b) { int n = strlen(a); int m = strlen(b); int len = n>m ? n:m; int i = 0; int flag = 0; int a1; int b1; char* c; int sum; reverse(a, 0, n-1); reverse(b, 0, m-1); c = (char*)malloc(len); while (i < len) { a1 = i<n ? (a[i]-'0'):0; b1 = i<m ? (b[i]-'0'):0; a1 -= flag; flag = a1<b1 ? 1:0; sum = (a1-b1+flag*10)%10; c[i] = sum+'0'; i++; } c[i] = '\0'; len = rmBlankZero(c, i); c[len] = '\0'; reverse(c, 0, len-1); return c; } int main() { char a[] = "99999999"; char b[] = "11111111"; char* c; c = subtraction(a, b); printf("%s\n", c); return 0; }
相关文章推荐
- 用双向链表实现超长整数加减法
- 双向循环链表长整数加法(大数加减法)
- 大整数加减法
- 大整数加减法
- 用双向链表实现超长整数加减法
- c语言随机选择两个整数和加减法形成算式要求学生解答
- 高精度计算-大整数加减法
- 利用移位、加减法实现整数开平方算法的方法(转)
- 整数加减法练习
- 关于iOS购物车数量加减(仅适用于整数加减法)
- 定点整数加减法
- 字符串加减法(整数,小数)
- 使用C++中string实现任意长度的正小数、整数之间加减法方法实例
- 无线OSS-高精度整数加法(加数可以为负数,应实现高精度加减法)
- 大整数加减法运算
- 大整数类-实现加减法
- 大整数算法(加减法)
- 大整数加减法
- 超长整数的加减法
- 从计算机底层考虑是如何实现‘’整数‘’的加减法