虽说题目给了1e18的范围摆明了想让我们用longlong,但是这样的一次一次 /=10 还是很烦躁呀,直接用string,每一位不就是当前位数数值了嘛(其实也要减去'0')
题目意思是说,一个所有数位都是4或者7的数字称为幸运数,一个数“包含4或7的个数”为幸运数的称为接近幸运数,问给出的数是不是“接近幸运数”
模拟咯~
数出4、7的个数,因为就18位,所以只能是4个或者7个,都不用再判断一遍的。
Code:
#include <cstdio>
#include <string>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
typedef long long ll;
// http://codeforces.com/contest/110
// Nearly Lucky Number
int main()
{
int cnt=0;
string s; cin>>s;
for(int i=0;i<s.length();i++)
if(s[i]=='4'||s[i]=='7')cnt++;
if(cnt==4 || cnt==7)cout<<"YES";
else cout<<"NO";
return 0;
}