c - 如何计算在 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 时,程序会给我一个错误的答案。
解决方案
您对外部 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
推荐阅读
- javascript - 如何解构嵌套对象并将其添加到导出函数中?
- android - Android ProgressBar:可见性不正常
- android - 使用 Dagger 2 更新依赖项
- r - 如何旋转单个单元格数据框
- google-cloud-storage - 没有分组的 Apache Beam 数据流固定窗口
- spring-batch - Spring Batch:需要更好的作业配置
- ios - IOS Swift SwiftUI Firebase “未找到默认存储桶。您是否正确配置了 Firebase 存储?”
- c++ - 将可变参数从一个函数传递给另一个?
- amazon-web-services - SQS Lambda 发布到同一堆栈中的同一 SQS
- here-api - 这里 Maps API (JS):GeoJSON 加载的多边形为属性字段返回空值