大数减法
2016-04-29 11:09
197 查看
这个程序比较多,但是思路很简单,只要求取大数减小数,如果是小数减大数,转换成大数减小数,输出负号
void sub(char a[], char b[]){ int alen = strlen(a); int blen = strlen(b); int num1[LEN]; int num2[LEN]; for (int i = 0; i < LEN; i++){ num1[i] = 0; num2[i] = 0; } for (int i = alen - 1,j = 0; i >= 0; i--){ num1[j++] = a[i] - '0'; } for (int i = blen - 1,j = 0; i >= 0; i--){ num2[j++] = b[i] - '0'; } int flag = 0; if (alen > blen){ for (int i = 0; i < LEN; i++){ num1[i] -= num2[i]; } for (int i = 0; i < LEN; i++){ if (num1[i] < 0){ num1[i+1] -= 1; num1[i] += 10; } }; } if (alen < blen){ for (int i = 0; i < LEN; i++){ num2[i] -= num1[i]; } for (int i = 0; i < LEN; i++){ if (num2[i] < 0){ num2[i+1] -= 1; num2[i] += 10; } } flag = 1; } int ti; if (alen == blen){ for (int i = 0; i < LEN; i++){ if (a[i] != b[i]){ ti = i; break; } if (i == LEN - 1) cout << 0 << endl; } if (a[ti] > b[ti]){ for (int i = 0; i < LEN; i++){ num1[i] -= num2[i]; } for (int i = 0; i < LEN; i++){ if (num1[i] < 0){ num1[i + 1] -= 1; num1[i] += 10; } } } else{ for (int i = 0; i < LEN; i++){ num2[i] -= num1[i]; } for (int i = 0; i < LEN; i++){ if (num2[i] < 0){ num2[i + 1] -= 1; num2[i] += 10; } } flag = 1; } } int i; if (flag == 0){ for (i = LEN - 1; i > 0; i--){ if (num1[i] != 0) break; } for (; i >= 0; i--){ cout << num1[i]; } cout << endl; } if (flag == 1){ cout << "-"; for (i = LEN - 1; i > 0; i--){ if (num2[i] != 0) break; } for (; i >= 0; i--){ cout << num2[i]; } cout << endl; } }
相关文章推荐
- CSS字体
- 1.微信公众号---获取关注用户
- 获取用户 ip
- MVVM模式下如何使用ReactiveCocoa响应链式编程<一>
- 递归打印级联目录
- android存储空间的分类
- SQL查询优化技巧
- Caused by: java.lang.NullPointerException: Attempt to write to field 'int android.app.Fragment.mNextAnim' on a null object reference
- js如何检测打开窗口是否存在的三个方法?
- win10系统将IIS服务器发送到桌面快捷方式方法
- tcp/ip协议,http协议详解
- vim
- 根据当前位置和数据库经纬度排序
- 谁替被偷的首发公号做主?娘家人微信实在是靠不住!
- ERP流程二 实体类大全
- QMetaObject::invokeMethod: No such method的问题
- Android之Socket群组聊天
- 写表格格式的时候经常会多出一页空白页
- xib 创建tableviewCell的重用
- Linux的任务调度机制