高精度 大数减法
2015-04-23 22:21
260 查看
INPUT :任意两个大数
OUTPUT :输出两个大数的相减的结果(结果可以为负)
之前用char类字符串做每位的转换比较麻烦 但是改为string型做大数减法比较简单
代码如下:
OUTPUT :输出两个大数的相减的结果(结果可以为负)
之前用char类字符串做每位的转换比较麻烦 但是改为string型做大数减法比较简单
代码如下:
#include <iostream> #include <cstring> using namespace std; string a,b; string substr(string a,string b ) { int i,j,k,flag=1; string s1,s2; if(a.size()<b.size()||a.size()==b.size()&&a.compare(b)<0) { //a的长度小于b的长度 或者 a的长度等于b的长度 a小于b s1=a; a=b; b=s1; flag=0; } //始 终 令 a 的 长 度 大 于 b 的长度 while (a.length()-1>b.length()-1) b='0'+b; //字符短的加前导零,使他们一样长 for (i=a.length()-1; i>=1; i--) //减,规整 最高位单独处理 { if(a[i]>=b[i]) a[i]=a[i]-b[i]; else { a[i]=a[i]-b[i]; a[i]=a[i]+10; a[i-1]=a[i-1]-1; } } a[0]=a[0]-b[0]; // a must more than b for( i=0; i<a.length(); i++) a[i]+=48; for(i=0; i<a.length(); i++) // 去零 from high to low if(a[i]!='0') break; if(i==a.length()) { a="0"; return a; } for(j=i,k=0; j<a.length(); j++,k++) s2=s2+a[j]; if(flag!=1) { s2='-'+s2; } return s2; } int main() { while(cin>>a>>b) { cout<<substr(a,b)<<endl; } return 0; }高精度问题要熟练 最好背过 比赛的时候能熟练的敲出来
相关文章推荐
- 大数,高精度计算---大数减法
- 5、大数,高精度计算---大数减法
- 高精度计算 大数减法
- 大数加法 减法 乘法 除法 高精度四则运算
- 整数大数模拟 高精度加法 高精度减法 高精度乘法 高精度除法 c/c++ java
- 大数,高精度计算---大数减法
- 高精度--大数减法 luogu 2142
- 大数,高精度计算---大数减法
- 大数加法 减法 乘法 除法 高精度四则运算
- 大数相加,高精度阶乘,大整数进制转换,大整数判断被小整数整除(JOJ--1029)
- 高精度减法
- Java工作利器之常用工具类(二)——数字工具类-大数乘法、加法、减法运算
- 【高精度】 利用分段存储的方法储存大数与运算
- 大数减法运算
- 大数运算——加法减法
- 大数运算(3)——大数减法
- 高精度减法模板
- 大数高精度运算(模板)
- 高精度运算(大数加减乘除)
- 高精度之大数阶乘