【发布时间】:2021-12-25 12:24:46
【问题描述】:
我正在尝试编写一个用 C 编写的程序,该程序计算 2 个二进制数的加法并使用上面的进位行打印出结果,如下所示
我需要关于“进位”行计算的具体帮助,但我似乎无法开始工作。
我的想法是检查每个数字的末尾数字和进位行的总和是否为 0、1、2 或 3,具体取决于总和。
如果和为 2 或 3,则“进位”为 1,因此程序加 1 并乘以 10。
如果和为 0 或 1,则没有“进位”,因此程序乘以 10。
我不知道逻辑缺陷在哪里,我非常感谢一些帮助。
carry = 0;
count =0;
while ((num1Temp > 0) || (num2Temp > 0))
{
count++;
if (((num1Temp % ten) + (num2Temp % ten) + (carry % ten)) == 3)
{
carry++;
carry = carry + pow(ten, count);
}
else if (((num1Temp % ten) + (num2Temp % ten) + (carry % ten)) == 2)
{
carry = carry + pow(ten, count);
carry++;
}
else if (((num1Temp % ten) + (num2Temp % ten) + (carry % ten)) == 1)
{
carry = carry * ten;
}
else if (((num1Temp % ten) + (num2Temp % ten) + (carry % ten)) == 0)
{
carry = carry * ten;
}
num1Temp = num1Temp / ten;
num2Temp = num2Temp / ten;
}
【问题讨论】:
-
注意:尽量避免使用整数计算
pow()。不要在每个循环中增加count++的幂,而是将一个值乘以10。 -
欢迎来到 Stack Overflow。看看你使用
carry的方式。您似乎不清楚是使用第一个数字还是最后一个数字。一旦您清楚这一点,您就可以查看carry % ten之类的内容,并确定它是否确实符合您的要求。