carry:进位数,如果大于等于n加到下一位
bit:结果每一位的数,应该考虑到两个相加再加上carry
过程:倒着遍历相加的两数,用bit记录两数对应的位上的数字相加+carry的值
分两种情况讨论:
(1)bit>=n:保留个位(carry-n)并加到结果对应的位置,carry置1
(2)bit<n: 直接把bit加到结果对应的位置,carry置0
考虑到两个数可能不一样长:
假设数1长一点,倒着遍历数1剩下的数,用bit记录数1对应的位上的数字+carry的值,同样将bit和n比较大小
考虑到两个数加完后carry=1,还有一个进位,结果加上1
//n进制数相加
int carry=0;
int bit;
int 数1,数2;
point1指向数1的最低位,point2指向数2的最低位
res;//结果
while(point1不到最高位&&point2不到最高位)
{
bit=point1->val +point2->val+carry;
if(bit>=n)
{
carry=1;
结果最后加入数(bit-n);
}
else
{
carry=0;
结果最后加入数(bit);
}
}
while(point1不到最高位)
{
bit= point1->val+carry;
if(bit>=n)
{
carry=1;
结果加入数(bit-n);
}
else{
carry=0;
结果加入数(bit);
}
}
while(point2不到最高位)
{
bit=point2->val+carry;
if(bit>=n)
{
carry=1;
结果加入数(bit-10);
}
else{
carry=0;
结果加入数(bit);
}
}
//如果到最后还有进位没加
if(carry==1)
{
结果加入数(1);
}
return 结果;
}
};