我需要以某种方式在 C 中迭代一个整数,而不需要任何高级的东西。我真的不明白将数字除以 10 与这次迭代有什么关系,或者它如何神奇地返回最后一个整数。有人可以解释一下如何做到这一点并迭代一个整数并向我展示 C 代码吗?
我的代码根本不起作用,实际上什么也没做,没有输出。但请告诉我。
#include <stdio.h>
int main (void)
{
printf("Enter a value.\n");
int x = 0;
scanf("%d", &x);
while (x < 0)
{
printf("Enter another integer please.\n");
scanf("%d", &x);
}
int counter = 0;
// tries to iterate through freaking integer but literally doesn't work or does nothing
while (x > 0)
{
counter = counter + x;
x = x % 10;
}
printf("The total sum of the integer's digits are %d\n", counter);
}
Run Code Online (Sandbox Code Playgroud)
您的代码中有几个问题。
第一个是做
x = scanf("%d", &x);
Run Code Online (Sandbox Code Playgroud)
scanf()
将其参数设置x
为输入,然后返回它分配的变量数,即1
。然后x =
赋值将输入替换为1
。因此,无论您输入什么,您都会设置x
为1
。只需使用scanf("%d", &x)
而不分配给变量即可。
下一个问题是循环数字的代码。该%
运算符返回除法的余数。因此,返回除以x % 10
时的余数,即数字的最后一位数字(例如,返回的余数)。当你这样做时x
10
123 / 10
12
3
x = x % 10;
Run Code Online (Sandbox Code Playgroud)
你进入了一个无限循环,因为一旦你到达一个数字,你就继续设置x
它自己(除非最后一个数字是0
,这不符合while (x > 0)
条件)。这就是为什么你的程序似乎没有做任何事情——它永远不会跳出这个循环。
您应该将最后一位数字添加到counter
,然后除以10 来删除最后一位数字。因此循环应该是:
while (x > 0)
{
counter = counter + x % 10;
x = x / 10;
}
Run Code Online (Sandbox Code Playgroud)
更正后的代码为:
#include <stdio.h>
int main (void)
{
printf("Enter a value.\n");
int x = 0;
scanf("%d", &x);
while (x < 0)
{
printf("Enter another integer please.\n");
scanf("%d", &x);
}
int counter = 0;
while (x > 0)
{
counter = counter + x % 10;
x = x / 10;
}
printf("The total sum of the integer's digits are %d\n", counter);
}
Run Code Online (Sandbox Code Playgroud)
以下是模数和除法如何迭代数字。
假设您有一个号码x = 5649
。
当您计算 时x % 10
,会返回最后一位数字,即9
。然后设置x = x / 10;
,将其设置为564
-- 没有最后一位数字的数字。
下一次循环时,您计算x % 10
,它返回该值的最后一位数字,即4
。然后设置x = x / 10;
,再次将其设置为56
没有最后一位数字的数字。
下次计算时x % 10
,它会返回6
。然后x = x / 10
将其设置为5
。
下次计算时x % 10
,它会返回5
。然后x = x / 10
将其设置为0
。
现在循环停止,因为条件是x > 0
,但不再为真。
正如您所看到的,循环从右到左遍历数字,因为每次它都会通过除以 10 来删除最后一位数字。同时,当counter
您这样做时,您将添加每个数字counter = counter + x % 10;