好的,所以这段代码的目的是提示用户输入整数 程序将打印出每个数字0-9及其在用户提供的数字中的出现次数。 输出应该看起来像这样
Enter a number: 28666
0 is repeated 0 times.
1 is repeated 0 times.
2 is repeated 1 times.
3 is repeated 0 times.
4 is repeated 0 times.
5 is repeated 0 times.
6 is repeated 3 times.
7 is repeated 0 times.
8 is repeated 1 times.
9 is repeated 0 times.
这是我目前的代码和输出。
#include <stdbool.h>
#include <stdio.h>
int main(void)
{
bool digit_seen[10] = {false};
int digit;
long n;
printf("Enter a number: ");
scanf("%ld", &n);
while (n > 0) {
digit = n % 10;
if (digit_seen[digit])
break;
digit_seen[digit] = true;
n /= 10;
}
if (n > 0)
for(int i=0; i<digit; i++)
digit_seen[i]++;
for(int i=0; i<digit; i++)
printf(" %d is occur %d times \n",i,digit_seen[i]);
if (n < 0)
printf("No repeated digit\n");
return 0;
}
这是我的输出
Enter a number: 147795655
0 is occur 1 times
1 is occur 1 times
2 is occur 1 times
3 is occur 1 times
4 is occur 1 times
你可以看到我没有得到我需要的输出而且我不明白为什么。如果有人能帮助我理解我出错的地方那将是一个很大的帮助,谢谢。
答案 0 :(得分:3)
您使用bool
值来存储哪些数字存在或哪些数字不存在,但如果您想要计算每个数字的次数,则需要使用int
代替bool
。
因此,将digit_seen
定义为:
int digit_seen[10] = {0};
然后更改循环,在其中计算数字的no:
while (n > 0) {
digit = n % 10;
digit_seen[digit]++;
n /= 10;
}
然后,你可以像这样打印digit_seen
数组:
for (int i = 0; i < 10; i++){
printf(" %d is occur %d times \n",i,digit_seen[i]);
}
修改强>:
答案 1 :(得分:0)
你需要两个循环 - 一个用于计数,一个用于打印计数。
由于您的预期输出列出所有数字,因此您不需要单独的digit_seen
循环。您可以简单地使用n%10
和n/10
来分解数字,并按照您的方式增加digit_count[digit]
。你需要为零添加一个特殊情况,因为这是你的循环退出条件。
答案 2 :(得分:0)
在两个
for(int i=0; i<digit; i++)
数字只是while循环中的最后一个值,因此,数字的第一个数字。同样,来自while的n值将始终为0,因此永远不要进入
if (n > 0)
for(int i=0; i<digit; i++)
digit_seen[i]++;
中没有
if (n < 0)
printf("No repeated digit\n");
所以只需进入
for(int i=0; i<digit; i++)
printf(" %d is occur %d times \n",i,digit_seen[i]);
然后显示原始n编号中是否存在数字,如结果所示。 您应该检查您的算法。
答案 3 :(得分:0)
你的主要错误是你试图增加一个布尔数组的元素“bool digit_seen [10]”。 你为什么不试试这个: