更新时间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代替就没问题了。
希望你能理解