标签:
描述:
题目描述:请设计一个算法完成两个超长正整数的加法。
要求实现函数:
void AddLongInteger(char * pcAddend, char * pcAugend, char * pcAddResult);
输入参数:
char * pcAddend:加数
char * pcAugend:被加数
char * pcAddResult:加法结果
返回值:无
运行时间限制: 1 Sec
内存限制: 128 MByte
输入:
两个超长正整数的字符串
输出:
相加后结果的字符串
样例输入:
123456789123456789 123456789123456789
样例输出:
246913578246913578
测试不通过,发出来看看问题在哪里。
// // 超长正整数相加.cpp // temptest // // Created by 彭威 on 15/8/1. // Copyright © 2015年 biophy.nju.edu.cn. All rights reserved. // #include <iostream> #include <algorithm> #include <string> using namespace std; class BigNumber { string num; bool reverse_flg; public: BigNumber(char *str):num(str){} BigNumber(){}; friend istream& operator>>(istream& in,BigNumber& p){ in>>p.num; return in; } friend ostream& operator<<(ostream& out,const BigNumber& p){ if (p.reverse_flg) { //for (auto iter = p.num.rbegin(); iter != p.num.rend(); iter++) { //only for c++11 for (string::const_iterator iter = p.num.end()-1;iter >= p.num.begin();--iter ){ out<<*iter; } }else{ out<<p.num; } return out; } friend const BigNumber operator+(const BigNumber& p1,const BigNumber& p2){ BigNumber p; size_t len = max(p1.length(), p2.length()); char plus=0; p.reverse_flg = true; for (size_t i =0; i < len; i++) { char x = p1[i] + p2[i] + plus - 2 * ‘0‘; plus = x / 10; x = x % 10 + ‘0‘; p.num.push_back(x); } if (plus) { p.num.push_back(plus+‘0‘); plus = 0; } return p; } const size_t length() const{ return num.length(); } const char operator[](size_t n)const { if (n >= num.length()) { return ‘0‘; } if (reverse_flg) { return num[n]; }else{ return num[num.length()-n-1]; } } }; int main(int argc,const char* argv[]){ BigNumber a,b; cin>>a>>b; cout<<a+b<<endl; return 0; }
标签:
原文地址:http://www.cnblogs.com/weierpeng/p/4695493.html