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