学C刷力扣 2022-02-21 17:57 采纳率: 66.7%
浏览 66

求1到n之间含6的整数个数

#include <stdio.h>

int main()
{
int n;

while (scanf("%d", &n) != EOF)
{
    int nums[11];
    int len = 0;

    int count = n;
    while (count > 0) {
        nums[len] = count % 10;// 从个位开始存数字进数组 倒序存储
        count /= 10;
        len++; // len 为位数 小于等于10
    }

    int i, number = 0;
    // 排除法 算出1-n中不含6的数字的个数
    
    for (i = len - 1; i >= 0; i--)
    {
        if (nums[i] <= 0) continue;
        if (nums[i + 1] == 6 && i < len - 1) break; // 假设输入为456789 那么从456000 - 456789 中每一位都包含6,所以不需要以下计算
        
        int num;
        if (nums[i] > 6) num = nums[i] - 1;
        else num = nums[i];

        int point = i;
        while (point > 0) {
            num *= 9;
            point--;
        } 

        if (nums[i] == 6) num -= 1; // 例子中 4560 的 6 在此处减去
        number += num;
    }
    // 减去所有不含6的个数,则为含6的个数
    printf("%d\n", n - number);
}

}

请问for循环后面是什么原理?

  • 写回答

1条回答 默认 最新

  • 赵4老师 2022-02-22 12:21
    关注

    代码功能归根结底不是别人帮自己看或讲解或注释出来的;而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。
    提醒:再牛×的老师也无法代替学生自己领悟和上厕所!
    单步调试和设断点调试(VS IDE中编译连接通过以后,按F10或F11键单步执行,按Shift+F11退出当前函数;在某行按F9设断点后按F5执行停在该断点处。)是程序员必须掌握的技能之一。

    评论

报告相同问题?

问题事件

  • 创建了问题 2月21日

悬赏问题

  • ¥15 用VBA将文件夹内的所有表格自动复制到一个表格的sheet1内,
  • ¥15 帮找书和配套代码。。
  • ¥15 使用深度优先搜索所有可能路径
  • ¥20 Ant Design of Vue 的表格使用,根据当前代码,实现以下功能
  • ¥15 C#中模版应用的问题
  • ¥15 Lambda expressions are allowed only at source level 1.8 or above报错,有没有解决办法
  • ¥15 请问有没有哪种软可实现图片里不同背景部分实现剪切分离
  • ¥15 codesys 使用问题
  • ¥15 Postman一直转圈进不去咋办?
  • ¥15 Kb4103712更新无法完成