$ CF110A ? Nearly ?Lucky ?Number$
还是一道比较不错的题目,可以拿来练练手\((QAQ)\)。
题目中虽说\(n\)在\(long \ long\)范围内,但不知为什么,我一看到要分解数字就想用字符串做。
输入就不说了……
因为要判断\(n\)是否为"类幸运数字",所以,我们可以开一个自定义函数
pd1
,函数的类型应该是bool
,因为要判断是否为"类幸运数字"吗。
bool pd1(string s) //自定义函数
{
int t=0; //计数器清零
for(int i=0;i<s.size();i++)
{
if(s[i]=='7'||s[i]=='4')
t++; //如果数是'4'或'7'的话,计数器++
}
if(pd2(t)) return 1; //判断计数器是否符合条件
return 0; //不符合条件,返回0
}
嘿,本代码还没写完整,看到代码中的这一句了吗if(pd2(t)) return 1;
pd2(t)
又是什么鬼?别急别急,我们再给出一下代码:
bool pd2(int n)
{
if(n==0) return 0; //没有'4'或'7' ,返回0
while(n!=0)
{
if(n%10!=7)
{
if(n%10!=4)
return 0; //不符合条件,返回0
}
if(n%10!=4)
{
if(n%10!=7)
return 0; //不符合条件,返回0
}
n/=10;
} //分解n
return 1; //一定符合条件,返回1
}
好了,大致内容就这些,下面给出完整代码:
#include<bits/stdc++.h>
using namespace std;
bool pd2(int n)
{
if(n==0) return 0;
while(n!=0)
{
if(n%10!=7)
{
if(n%10!=4)
return 0;
}
if(n%10!=4)
{
if(n%10!=7)
return 0;
}
n/=10;
}
return 1;
}
bool pd1(string s)
{
int t=0;
for(int i=0;i<s.size();i++)
{
if(s[i]=='7'||s[i]=='4')
t++;
}
if(pd2(t)) return 1;
return 0;
}
int main()
{
string s;
cin>>s;
if(pd1(s)) cout<<"YES"<<endl;
else cout<<"NO"<<endl;
}
原文地址:https://www.cnblogs.com/Luke-Skywalker/p/11331269.html
时间: 2024-10-09 08:52:36