#ifndef _BIGNUM_HPP_
#define _BIGNUM_HPP_
#include <vector>
#include <string>
#include <iostream>
using namespace std;
class BigNum;
BigNum operator+(const BigNum& lhs, const BigNum& rhs);
ostream& operator<<(ostream& os, const BigNum& rhs);
void Add(const BigNum& lhs, const BigNum& rhs, BigNum& res);
class BigNum
{
public:
BigNum(int n) : value(n){}
BigNum(const string& s);
friend BigNum operator+(const BigNum& lhs, const BigNum& rhs);
friend ostream& operator<<(ostream& os, const BigNum& rhs);
friend void Add(const BigNum& lhs, const BigNum& rhs, BigNum& res);
private:
vector<char> value;
};
#endif
#include "BigNum.hpp"
BigNum::BigNum(const string& s):value(s.length())
{
int j = value.size();
for(string::const_iterator it = s.begin(); it != s.end(); it++)
{
j--;
value[j] = *it;
}
}
ostream& operator<<(ostream& os, const BigNum& rhs)
{
size_t i = rhs.value.size();
bool zero = false;
if( i == 1)
return os << rhs.value[0];
if(rhs.value[ i - 1 ] == '0')
zero = true;
while( i > 0 )
{
i--;
while(zero == true)
{
i--;
if(rhs.value[i] != '0')
zero = false;
}
os << rhs.value[i];
}
return os;
}
void Add(const BigNum& lhs, const BigNum& rhs, BigNum& res)
{
int carry = 0;
char c = 0;
char tmp = 0;
size_t i = 0;
for( ; i < rhs.value.size(); i++)
{
tmp = lhs.value[i] + rhs.value[i] + carry - '0';
if( tmp > '9' )
{
carry = 1;
tmp -= 10;
}
else
{
carry = 0;
}
res.value[i] = tmp;
}
while( carry != 0 && i < lhs.value.size() )
{
tmp = lhs.value[i] + carry;
if( tmp > '9' )
{
carry = 1;
tmp = '0';
}
else
{
carry = 0;
}
res.value[i] = tmp;
i++;
}
if( carry > 0)
res.value[i] = '1';
}
BigNum operator+(const BigNum& lhs, const BigNum& rhs)
{
size_t lsize, rsize;
lsize = lhs.value.size();
rsize = rhs.value.size();
size_t n = lsize > rsize ? lsize : rsize;
BigNum res(n + 1);
res.value[0] = '0';
if( lsize > rsize )
{
Add(lhs, rhs, res);
}
else
{
Add(rhs, lhs, res);
}
return res;
}
//我自己实现的大数的加法的程序。。 终于验证可以使用了 呵呵
这个程序写好了 也算可以了了我的心愿了的
去年的某个时候 在杭州的UT斯达康面试 上机题就是这一道 我死活没有憋出来,当时就很后悔 为什么不好好的看看论坛上的帖子 对上面的问题做做呢?那样子的话 也许我就不会这么悲惨了,老是在哪里自怨自唉。
总结起来
我其实是眼高手低,然后从来都被宠着没有认清过自己。小学初中,老妈老师都说我数学学的还不错,其实是有点小聪明,分数还是那么可怜的一点点;到高中,因
为学校比较一般,考的名次看起来很美,被假象迷惑了;大学,因为自己有点基础,被给哥封为软件最好,也有点沾沾自喜;到了这个公司,也许因为我身体的原
因,也有点面试时做题速度超快的原因,被经理说我程序不错,还是没有摆正自己的位子。
受点挫折才好。嗯
呵呵, 心态 , 心态才是一切。
不要眼高手低