69,382
社区成员
发帖
与我相关
我的任务
分享
int CBigInt::pure_add(const char* _first,const char* _secend,std::string& _result)
{
if(_first == NULL || _secend == NULL)
{
return -1;
}
int flen = strlen(_first);
int slen = strlen(_secend);
int temp = 0;
int t_len = flen>slen ? flen : slen;
//动态分配存储结果数组,因为是加法,所以结果最大长度为最长操作数长度加1
//另加上一个结束符号位
char* t_result = new char[t_len+2];
if (t_result==NULL)
{
return -1;
}
memset(t_result,0,t_len+2);
flen--,slen--;
while (t_len >= 0)
{
if (flen<0)
{//如果其中以个操作数已经循环完,则结果仅加上另一个操作数
t_result[t_len] += _secend[slen]+48;
}
else if (slen<0)
{
t_result[t_len] += _first[flen]+48;
}
else
{
t_result[t_len] += _first[flen] + _secend[slen];
}
if (slen<0&&flen<0)
{
t_result[t_len] = 96;
}
//加上进位
t_result[t_len] += temp;
temp = 0;
if (t_result[t_len]>=106)
{//如果结果达到进位,置进位标志,并将结果复位
t_result[t_len] -= 10;
temp = 1;
}
//填写最终结果
t_result[t_len] -= 48;
t_len--,slen--,flen--;
}
char* p = t_result;
while (*p++=='0')
{
}
_result = --p;
delete []t_result;
return 0;
}