MSB对齐加法
MSB aligned addition
我正在寻找一种方法(最好是递归的)来添加两个 msb 对齐的整数。
例如:125 + 25 = 375。
我试图反转数字以有效对齐它们,但进位都是错误的。 IE。 526 (625) + 05 (50) = 531.
1) 使用 while / 10 循环计算两个数字的位数
2) 求差
3) 最小数乘以 10 ^ 差值
4) 将它们相加
您需要为此添加 math.h。假设 m 和 n 是自然数,下面的方法是将较小的数字乘以 10(如果需要),直到它的位数与较大的数字相同,然后相加。
int funkyAdd (int m, int n)
{
if ((m<=0)||(n<=0)){return -1;}
int smaller=std::min(m,n);
int larger=std::max(m,n);
while (floor(log10(smaller))<floor(log10(larger))){smaller*=10;};
return (smaller+larger);
}
我正在寻找一种方法(最好是递归的)来添加两个 msb 对齐的整数。
例如:125 + 25 = 375。
我试图反转数字以有效对齐它们,但进位都是错误的。 IE。 526 (625) + 05 (50) = 531.
1) 使用 while / 10 循环计算两个数字的位数
2) 求差
3) 最小数乘以 10 ^ 差值
4) 将它们相加
您需要为此添加 math.h。假设 m 和 n 是自然数,下面的方法是将较小的数字乘以 10(如果需要),直到它的位数与较大的数字相同,然后相加。
int funkyAdd (int m, int n)
{
if ((m<=0)||(n<=0)){return -1;}
int smaller=std::min(m,n);
int larger=std::max(m,n);
while (floor(log10(smaller))<floor(log10(larger))){smaller*=10;};
return (smaller+larger);
}