如何计算1到N之间包含3的数字,其中N是给定的输入?

时间:2018-10-11 00:43:07

标签: c

给定数字N,我希望计算出现在数字3中的3的数目。  范围1-N。

int N;
int cnt = 0;
scanf("%d", &N);

for (int i = 1; i <= N; i++) {
    if (i < 30) {
        if (i % 10 == 3)
            cnt++;
    }
    else {
        while (i > 0) {
            if (i % 10 == 3) {
                cnt++;
            }
            i = (i / 10);
        }
    }
}
printf("%d", cnt);

当我的输入介于1到29之间时,此程序可以正常工作,但是当输入超过30时,该程序会给我一个错误的答案。

1 个答案:

答案 0 :(得分:0)

您在外部for循环和内部while循环中使用相同的变量。
您需要为内部while循环使用其他变量。 通过变量j控制while循环,您的程序将如下所示:

#include <stdio.h>

int main(int argc, char * argv[])
{
    int N, j;
    int cnt = 0;
    scanf("%d", &N);

    for (int i = 1; i <= N; i++) {
        if (i < 30) {
            if (i % 10 == 3)
                cnt++;
        }
        else {
            j = i;
            while (j > 0) {
                if (j % 10 == 3) {
                    cnt++;
                }
                j = (j / 10);
            }
        }
    }
    printf("%d", cnt);
    return -1; 
}

输出:

>a.exe
30
4

>a.exe
33
8