C中的计数进位操作
Posted
技术标签:
【中文标题】C中的计数进位操作【英文标题】:counting carry operations in C 【发布时间】: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
之类的内容,并确定它是否确实符合您的要求。
【参考方案1】:
1.我认为的主要缺陷 在您的程序中,您无法到达 num1Temp (5) 或 num2Temp101 /strong> (5) 计算进位 为了实现这一点 (101) 我写了类似的说明
if (num1Temp == 1)
if (((11 % ten) + (num2Temp % ten) + (carry/ indice(10,count))) > 1)
carry = carry + indice(ten, count+1);
2。而且我认为当 sum 小于 2 时,我们不必对 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;
3.为了简单地得到进位,我已经改变了
(carry % ten)
与
(carry/ indice(10,count)
修改后的代码
int main()
int num1Temp=binary_8t(5);
int num2Temp=binary_8t(5);
int carry =0;
int count =0;
int ten=10;
while ((num1Temp > 0) || (num2Temp > 0))
if (num1Temp && num2Temp)
if (num1Temp == 1)
if (((11 % ten) + (11 % ten) + (carry/ indice(10,count))) > 1)
carry = carry + indice(ten, count+1);
else if(1)
if (num1Temp == 1)
if (((11 % ten) + (num2Temp % ten) + (carry/ indice(10,count))) > 1)
carry = carry + indice(ten, count+1);
if (num2Temp == 1)
if (((11 % ten) + (num2Temp % ten) + (carry/ indice(10,count))) > 1)
carry = carry + indice(ten, count+1);
if (((num1Temp % ten) + (num2Temp % ten) + (carry/ indice(10,count))) == 3)
carry = carry + indice(ten, count+1);
else if (((num1Temp % ten) + (num2Temp % ten) + (carry/ indice(10,count))) == 2)
carry = carry + indice(ten, count+1);
num1Temp = num1Temp / ten;
num2Temp = num2Temp / ten;
count++;
printf("\nFinal carry: %d",carry);
return 0;
和 power() 和 binary_8t 是我自己使用的函数。
【讨论】:
请编辑您的帖子以包含您已完成的修复的详细信息。以上是关于C中的计数进位操作的主要内容,如果未能解决你的问题,请参考以下文章