好吧,你可以使用更大的数据类型(例如处理大整数的库),或者你可以快速敲击自己的数据类型.
我建议如果这是一次性的,你会做很长时间的补充,就像你在学校开始的几年里学到的那样.您可以直接在两个字符串上操作,添加列,执行'carry',并构建包含结果的另一个字符串.您无需转换为二进制文件即可完成所有这些操作.
这里.只是为了好玩,我为你找到了一个解决方案:
string Add( const string& a, const string& b )
{
// Reserve storage for the result.
string result;
result.reserve( 1 + std::max(a.size(), b.size()) );
// Column positions and carry flag.
int apos = a.size();
int bpos = b.size();
int carry = 0;
// Add columns
while( carry > 0 || apos > 0 || bpos > 0 )
{
if( apos > 0 ) carry += a[--apos] - '0';
if( bpos > 0 ) carry += b[--bpos] - '0';
result.push_back('0' + (carry%10));
carry /= 10;
}
// The result string is backwards. Reverse and return it.
reverse( result.begin(), result.end() );
return result;
}
Run Code Online (Sandbox Code Playgroud)
请注意,为清楚起见,此代码甚至不会尝试处理错误.它也没有做否定,但解决这个问题并不困难.