首页 > 电脑

请问这题为什么判断条件是n%10==2

更新时间2018-07-03 12:15:33

题目:

请统计某个给定范围 [L, R][L,R] 的所有整数中,数字 22 出现的次数。

比如给定范围 [2, 22][2,22] ,数字 22 在数 22 中出现了 11 次,在数 1212 中出现 11 次,在数 2020 中出现 11 次,在数 21 中出现 11 次,在数 2222 中出现 22 次,所以数字 22 在该范围内一共出现了 66 次。

输入:两个整数LR  输出:出现次数

代码如下

#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; 

}


如题求解 比如在碰到21的时候 n%10不是不等于2吗?还有n/=10这一步的目的是什么?

本人初学者!

题目应该是问2出现的次数吧

在碰到21的时候,n%10==1而不是2哦;


原理:

语句n%10==2判断一个数的个位是否为2,以202为例,202%10==2,s++;

 接下来判断十位上是否有数字2,原来的个位已判断过就去掉,n/10=20,就把原来个位去掉了,由于20%10!=2,所以知道202十位上没有2;

同理,接下来判断百位数字,得把20的个位也去掉,20/10得2,2%10==2,则202百位上是2,s++。

由此知道202有两个2。更大的数字按以上原理也就得出2的个数了。


如果没有n=y这条语句,假如第一次y=12,y整除10后变成1,但下一次循环y应该等于13,这样y的原值就变了,而用变量n代替就没问题了。


希望你能理解

上一篇:GTA5问题。

下一篇:排练计时并且保存了排练时间,在播放时不是自己的排练时间