【问题标题】:How to iterate through an integer's digits in C?如何遍历C中的整数位?
【发布时间】:2021-02-20 07:49:41
【问题描述】:

我需要在没有任何高级东西的情况下以某种方式遍历 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);


}

【问题讨论】:

  • 如果您了解模数的作用,应该很明显它是如何遍历数字的。
  • 我不知道,这不是什么工作。你能帮我或至少给我看看伪代码吗?我们从来没有学过模数,它在任何时候都是高中或大学的逻辑,这些东西真的让我很困惑。 mod如何以及为什么通过数字进行交互,你能评论并向我展示代码吗?为什么修改 10 可以工作,为什么我的代码不工作?请给我看
  • 您可以通过将数字输入为字符串来简单地遍历数字的数字。您逐位键入它,它们就在那里,并且不受int 可以表示的大小的限制。但除此之外,我建议将循环更改为while (x &gt; 0) { counter += x % 10; x /= 10; }

标签: c loops


【解决方案1】:

您的代码中有几个问题。

第一个是做

x = scanf("%d", &x);

scanf() 将其参数x 设置为输入,然后返回它分配的变量数,即1。然后x = 赋值将输入替换为1。因此,无论您输入什么,都将x 设置为1。只需使用 scanf("%d", &amp;x) 而不分配给变量。

下一个问题是循环数字的代码。 % 运算符返回除法中的余数。所以x % 10 在将x 除以10 时返回余数,这是数字的最后一位(例如123 / 10 返回12,余数为3)。当你这样做时

x = x % 10;

你进入了一个无限循环,因为一旦你得到一个数字,你就一直将x设置为它自己(除非最后一个数字是0,它不符合while (x &gt; 0)条件)。这就是为什么你的程序似乎什么也没做——它永远不会跳出这个循环。

您应该将最后一位数字添加到counter,然后将最后一位数字除以除以 10。所以循环应该是:

    while (x > 0)
    {
        counter = counter + x % 10;
        x = x / 10;
    }

更正后的代码是:

#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);
}

下面是模数和除法如何遍历数字。

假设您有一个号码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 &gt; 0,它不再是真的。

如您所见,循环从右到左逐步遍历数字,因为每次它都会通过除以 10 来删除最后一个数字。同时,当您执行 @987654363 时,您会将每个数字添加到 counter @

【讨论】:

  • x123x % 10 是3。所以你将x 设置为3。当x3 时,x %10 也是3,所以你将x 再次设置为3。现在你陷入了一个循环。
  • 但是x = x / 10123 替换为12。下次它用1替换它,下次它用0替换它,循环停止。
  • counter = counter + x % 10 有效,因为x % 10 是最后一个数字,因此您将其添加到counter,这就是您将所有数字相加的方式。
  • 当您执行x = x % 10 时,您并没有删除最后一位数字,而是删除了所有数字除了最后一位数字。所以你永远被最后一个数字卡住了。
  • 不,我不会将其添加到我的回复中。一次一个问题。
猜你喜欢
  • 2014-12-12
  • 2015-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-16
  • 1970-01-01
  • 1970-01-01
  • 2020-03-18
相关资源
最近更新 更多