魔数湖南大学程序设计作业
【问题描述】
魔数是由数字1、14和144连接而成的数,可以使用这些数任意多次,因此14144、141414和1411是魔数,而514和414不是。
【输入形式】
输入一个整数n(1≤n≤109)。
【输出形式】
如果n是魔数,则输出"YES",否则输出"NO"
【样例输入1】
114114
【样例输出1】
YES
【样例输入2】
441231
【样例输出2】
NO
实现思路:找出1,14,144各有几个,再将每个数个数与相应的个数相乘得到一个数字位数,再将这个数字位数与输入的数字位数比较,若相等(即数字中没有掺杂其他的数),则这个数为魔数。
注意:144中含有1和14;14中含有1,全位数的的时候要相应变化!
代码展示:
#include<iostream>
using namespace std;
int z1(int w);//定义找1,14,144,的函数和确定输入数字位数的函数
int z14(int x);
int z144(int y);
int zws(int z);
int main() {int n,a,b,c,d;
cin>>n;
a=z1(n),b=z14(n),c=z144(n),d=zws(n);
if((a+b+c)==d)cout<<"YES";
else cout<<"NO";
}
int z14(int x){
int k=0;
while(x!=0){
if(x%100==14)k++;
x/=10;}
return k;}
int z144(int y){
int j=0;
while(y!=0){
if(y%1000==144)j++;
y/=10;}
return j;}
int zws(int z){
int i=0;
while(z!=0){
z/=10;
i++; }
return i;}
int z1(int w){
int m=0;
while(w!=0){
if(w%10==1)m++;
w/=10;}
return m;}