c - for 循环和模运算符
问题描述
编写一个程序,计算一个整数的各位数字之和。例如,数字 2155 的数字之和为 2 + 1 + 5 + 5 或 13。程序应接受用户输入的任意整数。
我可以使用 while 循环让它工作,但如果我用循环将它子for
化,程序会计算除最后一个之外的所有数字。为什么是这样?
#include <stdio.h>
int main(void)
{
int i, num, sum = 0, temp;
printf("Enter the number:\n");
scanf("%i", &num);
printf("Test for num: %i\n", num); //both num & temp return same number
temp = num;
printf("Test for temp: %i\n", temp);
//while (num > 0)
for (i = 0; i <= temp; i++) //replacing temp w/ num will skip last num
{
sum += num % 10;
//sum += right;
num /= 10;
}
printf("Given number = %i\n", temp);
printf("Sum of digits of %i = %i", temp, sum);
return (0);
}
解决方案
正如您已注释掉的那样,在 for 循环中使用 num ,您将 i 与原始数字的被除数相比,而不是 while num > 0
。
例如,如果您有 num = 158,则循环将执行,然后将 num 设置为 15。i 递增为 1。因此 i < num,因此它会再次执行。这次循环之后,num == 1 和 i == 2。因此它不会执行,并且 158 中的 1 不会被添加。
如果您的最高位大于或等于位数,则您在 for 循环中带有 num 的代码将起作用。否则,它不会。
您可以摆脱 i 并在 for 循环中简单地使用 num 。
for(;num > 0; num /= 10)
sum += num%10;
推荐阅读
- reactjs - 如何将一个 useRef 用于多个元素?或者如何将 useRef 用于类似的行为?
- azure - [警告]找不到键的 loc 字符串:CorrelationIdForARM
- python-3.x - 在列出每个项目后将项目添加到带有输入的空列表
- c# - 是否可以捕获或隐藏非托管异常窗口?
- python - 从接口的 IP 和网络掩码获取网络 IP
- python-3.x - 在熊猫数据框中仅显示重复值序列中的第一个实例的更好方法?
- drupal - Drupal:从 submitForm() 中的控制器调用函数时出现“错误:找不到类”
- javascript - 如何使用 Promise 设置变量的值,然后使用 Express 发布到 db?
- linux - 如何读取套接字接收到的 TCP 段数
- python - 如何在 Python 中求解具有两台服务器的马尔可夫链的大概率矩阵?