我试图通过将两个八进制数相加来将它们相加,但是,当数字之和大于7时,我就卡住了。我必须进行进位并将其加到下一个加法循环中。我找不到正确的表达式来考虑进位并计算最终的和。
要考虑的另一种情况是八进制数a和b的位数不相同,例如:6和13(6+13=21 inoctal)。我无法为while循环建立这样的条件(如果两者的位数相同,我可以运行while循环,直到其中一个或两个都变为零)
有人可以请帮助/完成以下代码:
int octal_sum(int a,int b) //a and b and octal numbers
{
int sum=0,carry=0,d=0;
while(**???**)
{
d=0;
d=carry+(a%10)+(b%10);
a/=10;b/=10;
if(d>7)
{
carry=1;
d=d%8;
}
sum= **???**
}
return sum; //returns octal sum of a and b
}
4条答案
按热度按时间ss2ws0br1#
因为你传递的是
int
s,我假设你使用的是十进制编码的八进制数 *,也就是说,十进制数只使用0到7(包括0和7),例如,数字1238实际上是8310,使用你的方案,它将被 * 编码 * 为12310。*确定停止条件-您希望
while
循环继续,直到数字a
、b
和carry
都变为零。换句话说,条件应为a || b || carry
*将下一位数字加到和中-由于结果是十进制的,你需要将数字
d
乘以下一个连续的10的幂,一个简单的方法是添加一个新变量m
,它从1
开始,每次迭代都乘以10。结果如下所示:
Demo.
2guxujil2#
这是我做的函数。记住进位是很重要的。因为如果你的数字加起来更长(例如:7777 + 14 = 10013)如果你忽略进位,代码只会返回4位数(你的最长数字),所以0013,也就是13,不太好,所以我们需要考虑进位,我们必须继续循环,直到我们的数字和进位都是0。
更进一步,如果你计算
a%10 + b%10 + carry
得到的数字小于8,那么我们就不再需要再次进位,所以我们需要重新设置这个值。注意我用的是位数排序整数,它基本上允许我把位数加到和的开头,方法是乘以10的幂,然后把它加到和上。
最终代码如下所示。
希望对你有帮助!
sd2nnvve3#
我写得尽可能简单
iaqfqrcu4#
1.我使用StringBuilder来添加字符,这比使用字符串要好,它是不可变的。
2.read 通过将字符串转换为字符数组来从字符串中提取字符,通过从ASCII值“0”中减去字符来将字符转换为整数
1.请确保处理结转的情况也