高精度减法
2016-03-18 23:22
309 查看
高精度减法
传入参数约定:传入参数均为string类型,返回值为string类型
算法思想:倒置相减再还原。
算法复杂度:o(n).
#include<iostream> #include<cstring> #include<algorithm> using namespace std; const int L=110; string sub(string a,string b)//只限大的非负整数减小的非负整数 { string ans; int na[L]={0},nb[L]={0}; int la=a.size(),lb=b.size(); for(int i=0;i<la;i++) na[la-1-i]=a[i]-'0'; for(int i=0;i<lb;i++) nb[lb-1-i]=b[i]-'0'; int lmax=la>lb?la:lb; for(int i=0;i<lmax;i++) { na[i]-=nb[i]; if(na[i]<0) na[i]+=10, na[i+1]--; } while(!na[--lmax]&&lmax>0); //注意这里有逗号 !! lmax++; for(int i=lmax-1;i>=0;i--) ans+=na[i]+'0'; return ans; } int main() { string a,b; while(cin>>a>>b) cout<<sub(a,b)<<endl; return 0; }
相关文章推荐
- Android-在动作栏中添加和删除选项卡
- warning: target CPU does not support interworking
- 【POJ】[1703]Find them, Catch them
- Word文档分割总结
- C语言中的关键字
- CountDownLatch
- 在Ubuntu 14.04中升级python到2.7.11
- 2014蓝桥杯 地宫取宝 &&hdu 4597 四维数组状态记忆化
- Android中四大组件总结
- Java中String类(字符串操作)的10个常见问题和解决方法
- 多线程中跨线程访问的解决方法
- 在中国,程序员的职业生涯有多长?
- Java命名规范
- composer 安装 laravel 日志
- 老罗Looper(23)例子讲述Looper与Message,线程和Handler关系
- 删除链表中重复的结点
- 从n到m,有-1和*2两种操作。问最少走几步
- mac jdk原因导致 maven命令无法执行
- 13. 精确计算使用BigDecimal
- gcc命令大全