前言:
水仙花数此题,说实话就算高手不一定一遍就能过,稍微马虎一点就错了!
(今日Godyu有些伤心,心情格外忧伤很想喝酒,已然说不出来其他的话了)
妈的该*题就*题, 内啡肽启动!
解析
- 前面呢 就是一个模板而已 这个就是对应前面求水仙花数 前面题有碰见过 模板还不会的建议查看我前面的文章初遇函数~~ 水仙花呢翁恺也有讲
主要是主函数int main 后面的上难度了
输入数据有多组 所以用到while循环 不等于EOF没什么问题吧兄弟们
然而while内的代码特别注意 !注意空格问题! 为什么要定义一个x=0?
本质上是我们在寻找第一个数字 为什么要把第一个数字拉开?
因为输出的时候我们需要一个空格隔开.
输入 300 380
输出 370 371
因为370 和371 之间需要一个空格 所以我们每次需要输出(printf” %d”) ;没什么问题
但是第一个我们输出的时候前面也会有一个空格 所以第一个必须给他隔开! 所以就知道为何要把第一个单独拉开 剩余的就好理解了吧 注释也有 这里附上翁恺和我的文章
96答案+解析
#include<stdio.h>
int narcissus(int n)
{
int b,c,d;//定义数字,个位b,十位c,和百位d
b=n%10;
c=(n/10)%10;
d=(n/100)%10;
if(n==c*c*c+b*b*b+d*d*d) return 1;//判断n是否为水仙花数若是函数返回1
else return 0;//否则返回0
}
int main ()
{
int m,n,a,x;//定义数字m和n,以及循环变量a和标志器x
while(scanf("%d %d",&m,&n)!=EOF)//当输入没有截止时
{
x=0;//每次初始化标志器为0
for(a=m;a<=n;a++)//从m到n开始查找
{
if(narcissus(a)&&x==0)//如果标志器初始化状态,并且
printf("%d",a),x++;
else if(narcissus(a)&&x!=0)//如果函数返回了1,x!=0说明他并不是第一个数字
{
printf(" %d",a);//说明不是第一数字,在前面加空格后再输出
}
}
if(x==0)//如果没找到
{
printf("no");//输出no
}
printf("\n");//每次结束查找,换一次行
}
}
THE END
暂无评论内容