#include <stdio.h> int main() { int n,x; scanf("%d %d",&n,&x); int count =0; for(int i = 1;i<=n;i++) { int m =i;//从1开始计算 while(m)//循环运行的条件 { if(m%10==x) //如果m除以10的余数是x的话,那么count就++ count++; m=m/10; //再次定义m的值 } } printf("%d\n",count); return 0; } //m /= 10; 表示将变量 m 除以 10 并将结果重新赋值给 m。这种操作在循环中用于逐步移除 m 的最低位数字,从而逐位检查 m 中的每个数字。 //假设 i 的值为 123,那么在第一次迭代中 m 也将是 123。循环开始时: /*1.检查 m % 10,得到 3。如果这个数字等于 x,则 count 加一。 2.然后执行 m /= 10,此时 m 的值变为 12(即去掉了最低位的 3) 在下一次循环迭代中: 1.再次检查 m % 10,得到 2。重复判断过程 2.执行 m /= 10,现在 m 的值变为 1。 在第三次循环迭代中: 1.检查 m % 10,得到 1。再次进行判断 2.执行 m /= 10,此时 m 的值变为 0,因为 1 除以 10 等于 0。 当 m 变为 0 时,while 循环的条件不再满足,循环结束。这样,通过逐步除以 10,代码能够检查 i 的每一位数字,并对等于 x 的数字进行计数。 使用 m /= 10 而不是 m = m / 10 的好处是,/= 操作符直接对整数进行除法操作并更新 m 的值,避免了进行浮点数除法然后再进行类型转换的需要。*/