首页 > 解决方案 > 如何计算在 1 和 N 之间包含 3 的数字,其中 N 是给定的输入?

问题描述

给定一个数字 N,我希望计算在 1 - N 范围内出现的 3 的数量。

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 时,程序会给我一个错误的答案。

标签: c

解决方案


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

#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

推荐阅读