题解 P1179 【数字统计】
蒟蒻的第三篇题解!
相对来说,这一题还是比较简单的。
主要就是考数字拆分:
for(int i=L;i<=R;i++) //从L到R这个范围中找数字2
{
x=i; //用x来装i的值
while(x>0) //只要x大于0就运行下面的程序
{
if(x%10==2)ans++; //如果i某一位的数字是2,ans++
x/=10; //准备好下一位数字的判断
}
}
下面这一段程序的解释
while(x>0)
{
if(x%10==2)ans++;
x/=10;
}
注:假设x=123
第一次运行:
x>0,所以运行下面程序 x%10==3 所以ans不加 x/=10 x=12
第二次运行:
x>0,所以运行下面程序 x%10==2 所以ans++ x/=10 x=1
第三次运行:
x>0,所以运行下面程序 x%10==1 所以ans不加 x/=10 x=0
第四次运行:
x==0,所以不运行下面程序
AC代码
#include<bits/stdc++.h> //万能头文件
using namespace std;
int L,R,x,ans;
int main()
{
scanf("%d%d",&L,&R);//输入
for(int i=L;i<=R;i++) //从L到R这个范围中找数字2
{
x=i; //用x来装i的值
while(x>0) //只要x大于0就运行下面的程序
{
if(x%10==2)ans++; //如果i某一位的数字是2,ans++
x/=10; //准备好下一位数字的判断
}
}
printf("%d",ans);//输出
return 0;
}