题解 P1179 【数字统计】

· · 题解

这道题重点在于分离多位数,只要将分离多位数掌握好,这道题就非常的简单了。

本题的分离多位数程序段:

while(x!=0)
{
if(x%10==2) s++;
x/=10;
}

这样就很简单了。

按照上面的的思路,我编的程序是——

#include<iostream>
using namespace std;
int main()
{
    long long a,b,s=0;//s要赋初值,不然运行后有一大堆数字
    cin>>a>>b;
    for(int y=a;y<=b;y++)
    {
        while(y!=0)
        {
            if(y%10==2) s++;//分离多位数,判断是否等于二
            y/=10;
        }
    }
    cout<<s;
        return 0;
}

当我信心满满的把这个代码提交洛谷后,洛谷显示——全部超时!!

What's wrong?

我再重新分析代码,发现了一个错误——我改变了循环变量的值。

所以,AC代码应该是这样的:

#include<iostream>
using namespace std;
int main()
{
    long long a,b,s=0,n;
    cin>>a>>b;
    for(int y=a;y<=b;y++)
    {
        n=y;//不能改变循环变量的原值,所以要找“替身”
        while(n!=0)
        {
            if(n%10==2) s++;
            n/=10;
        }
    }
    cout<<s;
        return 0;
}
也可以用while循环嵌套分离多位数,这里就不再详细阐述了,就留给大家思考吧!