C++实现两个大数相减
来源:互联网 发布:橱柜哪个牌子好 知乎 编辑:程序博客网 时间:2024/06/03 06:17
两个大数相减。(1)首先是数据输入的问题,采用字符创输入的形式;(2)其次需要比较两个数据的大小,两个数相减会有正负号的问题,若a>b,则有a-b=-(b-a),计算出b-a的值,然后在字符串的前面加上"-"即可,转换成大数减去小数的问题;(3)最后需要考虑的问题也是最核心的问题,两个数相减的过程。从两个数的末位开始,这涉及到借位的问题,字符向数字转化,数字向字符转化的问题等。下面来看它们的具体实现。
- 比较两个字符串的大下
比较两个字符创的大小,首先看两个字符串的长度,长度越长,显然数据越大;其次如果长度相同,则从头到尾顺次比价对应位置的字符的大下。具体实现如下:
/大于或者等于返回为true,小于返回为false/bool isGreat(string chara, string charb){ int lena = chara.length(); int lenb = charb.length(); if (lena > lenb) return true; else if (lena < lenb) return false; else { int n = lena; int i = 0; for (; i < n; i++) { if (chara[i]>charb[i]) return true; else if (chara[i] < charb[i]) return false; } if ((i == n) && chara[i - 1] == charb[i - 1]) return true; } return false;}
2. 两个数相减的实现
两个数相减,主要涉及到借位和数字和字符的转化的问题,然后相减是分别从两个大数的末端开始的。具体的实现如下。
void differValue(string astr, string bstr,char* cstr){ int overflow = 0; //借位标志,有借位时设置值为-1 int i, j; for ( i = (astr.length()-1),j=bstr.length()-1; i >=0,j>=0; i--,j--) { if ((astr[i] + overflow) < bstr[j]) { cstr[i] = (astr[i] - '0') + overflow + 10 - (bstr[j] - '0')+'0'; overflow = -1; } else { cstr[i] = (astr[i] - '0') - (bstr[j] - '0')+'0'; overflow = 0; } } while (i>=0) //只剩下一个数的时候 { if ((astr[i]-'0' + overflow)<0) { cstr[i] = astr[i] + overflow + 10; overflow = -1; } else { cstr[i] = astr[i]; } i--; }}
3. 最后输入输出问题
输入的两个大数据采用,采用字符创的形式,开始不知道最后的结果的大下,最后的结果存放在new开辟的堆内存中,具体实现如下:
int main(){ string stra,strb; cin >> stra >> strb; int n = stra.length() > strb.length() ? stra.length() : strb.length(); char* result=new char[n] ; memset(result, -1, n); if (isGreat(stra, strb)) { differValue(stra, strb, result); } else { //结果字符串的 第一位作为符号位,如果结果为负,应该存放"-" result[0] = '-'; differValue(strb, stra, result+1); } for (unsigned int j = 0; j<strlen(result); j++) { if (result[j] != '-1') //最后输出的时候,忽略字符为空的情况 { cout << result[j]; } } delete[] result; }
4. 输出结果
0 0
- C实现两个大数相加
- C++实现两个大数相减
- C语言实现两个大数相乘
- 两个大数相减
- 两个大数相减
- 两个整型大数相减
- 实现两个大数相乘
- 实现两个大数相加
- 实现两个大数相加!
- 两个大数相乘(转)C
- 两个大数相加 C语言
- C语言:实现大数相除,利用大数相减原理。
- C语言实现大数相加相减和相乘
- 实现两个大数的加减乘除
- 栈实现两个大数相加
- 两个大数相乘-python实现
- 两个大数相加 ----Javascrit 实现
- Matlab实现两个大数相加
- [JSOI2008]星球大战starwar
- 16年9月14日谈
- Python2.7当中《笨办法学 Python》ex13.py报错的处理办法
- Android ADB常用命令整理
- Java中的main()方法详解
- C++实现两个大数相减
- 18 UI美化自定义主题样式代码
- windows下让自己的程序调用caffe库
- 能划分两子集合,每个集合的和相等
- JS中string方法中常用方法之二:String.prototype.concat()
- 2016年下半年规划
- Android小项目之倒计时工具的实现
- spring Invalid content was found starting with element 'init- param'
- HTML 图像