简单高精度减法
来源:互联网 发布:免费路由软件 编辑:程序博客网 时间:2024/06/05 13:31
高精度减法是先确定好哪个数较大,用较大的去减较小的,判断方法是长度和当长度相同时的高位的大小。
这里的做法是覆盖掉原来的数组。
当出现作差位为负的时候,向更高位借1,依次借下去直到为非负为止,同时注意要考虑好正负问题,可以单独开一个正负的开关。
放代码:
#include <stdio.h>#include <iostream>#include <string.h>#include <string>#include <stdlib.h>#define MAXN 5001using namespace std;int main(){ void init (int x[], char temp[], int len); void sub (int x[], int y[], int len, int on); char str1[MAXN], str2[MAXN]; int l1, l2, k, a[MAXN]={0}, b[MAXN]={0}; cin>>str1>>str2; l1 = strlen (str1); l2 = strlen (str2); init (a, str1, l1); init (b, str2, l2); if (l1 > l2) sub (a, b, l1, 0); else if (l1 < l2) sub (b, a, l2, 1); else { k = strcmp (str1, str2); if (k == 0) cout<<0<<endl; if (k > 0) sub (a, b, l1, 0); if (k < 0) sub (b, a, l2, 1); } return 0;}void init (int x[], char temp[], int len) //转换成整型数组{ int i; for (i = 0; i <= len-1; i++) { x[i] = temp[len-1-i] - '0'; }}void sub (int x[], int y[], int len, int on){ int i; for (i = 0; i < len; i++) //减法计算 { x[i] -= y[i]; //结果保留在原有数组 if (x[i] < 0) { x[i+1]--; x[i] += 10; } if (x[len-1] == 0) len--; } for (i = len -1; i >= 0; i--) //如果最前位的数为0,就消去1位长度 { if (x[i] == 0) len--; if (x[i] != 0) break; } if (on == 1) x[len-1] = -x[len-1]; for(i = len-1; i >= 0; i--) //输出结果 cout<<x[i]; cout<<endl;}
阅读全文
0 0
- 简单高精度减法
- 高精度减法
- 高精度减法
- 高精度减法
- 高精度减法
- 高精度减法
- 高精度减法
- 高精度减法
- 高精度减法
- 高精度减法
- 高精度减法
- 高精度减法
- 高精度减法
- 高精度减法
- 高精度减法
- 高精度减法
- 高精度减法
- 高精度减法
- MySQL 5.6 (Win7 64位)下载、安装与配置图文教程
- LIS问题(最长递增子序列)
- 顺时针、逆时针两种方式减小的倒计时动画
- .编写函数: unsigned int reverse_bit(unsigned int value); 这个函数的返回值value的二进制位模式从左到右翻转后的值。
- ACdream 1015 A
- 简单高精度减法
- 按钮布局
- springboot2入门(1-第一个应用)
- java总结1021
- 10_JavaWeb_ServletResponse
- 两个有序序列的中位数
- CSS选择器
- javaSE-P4,形式参数,返回值,内部类总结
- 推荐系统(三)