题解 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;           
}