大数加法
2016-10-23 15:13
239 查看
#include <iostream> #include <string> using namespace std; int max(int &x , int &y){ if(x>y){ return x; } else{ return y; } } int min(int &x , int &y){ if(x<y){ return x; } else{ return y; } } int main(){ int T; cin>>T; string a,b,c,d,e; int l1,l2,l3,l4,i,temp; int count = 1; int carry; while(T--){ c="";//每次要把c,d字符串清零 d=""; cin>>a>>b; l1=a.size(); l2=b.size(); l3=min(l1,l2); l4=max(l1,l2); if(a.size() > b.size()){//d代表较长数,e代表较短数 d=a; e=b; } else{ d=b; e=a; } carry = 0; if(l3 == l4){//分类讨论两个数长度是否相同 for(i=l4-1;i>=0;i--){ temp =( a[i] - '0' + b[i] - '0' + carry) % 10; carry = ( a[i] - '0' + b[i] - '0' + carry) / 10; c.push_back(temp + '0'); } if(carry!=0){ c.push_back(carry + '0'); } }////分类讨论两个数长度是否相同 else{ for(i=l4-1;i>l4-l3-1;i--){ temp =( d[i] - '0' + e[i-(l4-l3)] - '0' + carry) % 10;//长度不同的两个数位数要对齐来加 carry = ( d[i] - '0' + e[i-(l4-l3)] - '0' + carry) / 10; c.push_back(temp + '0'); } for(;i>=0;i--){ temp = (d[i] - '0' + carry) % 10; carry = (d[i] - '0' + carry) / 10; c.push_back(temp + '0'); } if(carry!=0){ c.push_back(carry + '0'); } } cout<<"Case "<<count<<":"<<endl; cout<<a<<" + "<<b<<" = "; for(int j = c.size() - 1; j >= 0 ; j--){//push进时是从个位的,所以输出要倒序输出 cout<<c[j]; } cout<<endl; if(T != 0){//最后一组加法的换行符不能要 cout<<endl; } count++; } return 0; }
相关文章推荐
- 51Nod - 1005 大数加法
- nyoj&nbsp;大数加法
- POJ 1053 Integer Inquiry && HDOJ 1047 Integer Inquiry (大数加法)
- POJ 1090 Chain 递推 + 大数加法
- hdu 1002 A + B Problem II(大数模拟加法)
- C++大数加法乘法
- 大数加法
- 蓝桥杯 算法提高 大数加法
- HDU 4099 Revenge of Fibonacci(字典树+大数加法)
- 斐波那契额数列+大数加法
- 大数加法运算
- 大数加法,乘法.
- Hat's Fibonacci(大数加法+直接暴力)
- [大数加法]Add Binary
- NOYJ 114(大数加法)
- HDOJ 1047 大数加法 水
- 大数加法(基础)
- 大数加法
- 哈理工OJ 2170 大斐波那契数(大数加法)
- 每日算法之大数加法