c语言:遍历水仙花数n,判断是不是为素数,并返回结果。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言:遍历水仙花数n,判断是不是为素数,并返回结果。相关的知识,希望对你有一定的参考价值。

参考技术A LZ你好~
首先你要理解啥是水仙花数:

水仙花数是指一个 n 位数 ( n≥3 ),它的每个位上的数字的 n 次幂之和等于它本身。(例如:1^3 + 5^3 + 3^3 = 153)

以上来自百度百科。

按照楼主的程序,有3层循环,姑且叫做a循环,b循环,c循环。
我们先从循环上下界和条件来看:
楼主用a循环代表个位数,用b循环代表10位数,c循环代表百位数,对嘛?假设是这种情况,让我们先不看代码。
事实上a循环是最外面的循环,c循环是最里面的循环,而计数按照逻辑应该是 111,112,113这样增长的,所以逻辑上应该反过来,a代表百位数,b代表10位数,c代表个位数。(其实您的方式也可以遍历所有您想遍历的数,只不过从逻辑上变成111,211,311...911,121,221...这样了,但是不觉得很不舒服嘛~)
然后我们来分析代码,结构很明白了:
a循环,百位数

b循环,十位数

c循环,个位数

验证







然后我们来确定验证:
一个水仙花数n,假设是1000以内的3位数,写作abc也就是 n = a*100 + b*10 + c = a^3 + b^3 + c^3,这不就是验证条件嘛?所以条件就是a*100 + b*10 + c = a*a*a + b*b*b + c*c*c;

然后来看循环上下界,百位数可以从1-9,十位数可以从0-9,个位可以从0-9,这时候程序就完成了啦。

楼主在确定上下界的时候犯了错哦,十位数不可以当做10到99,你要单纯的将她看成数字,因为十位数只可能出现0-9,这10种情况,而不会出现11,23,56这样的情况吧?

所以关键的循环体应该是:

for(a=1;a<=9;a++)

for(b=0;b<=9;b++)

for(c=0;c<=9;c++)

if(a*100 + b*10 + c == a*a*a + b*b*b + c*c*c)

printf("%d,%d,%d\n",a,b,c);









我把大括号全带上了,请养成良好的编程习惯哦~
当然你也可以把最后验证部分(if部分)替换成三元表达式,使用某一些编译器效率会提高一点:

for(a=1;a<=9;a++)
for(b=0;b<=9;b++)
for(c=0;c<=9;c++)
a*100 + b*10 + c == a*a*a + b*b*b + c*c*c ? printf("%d,%d,%d\n",a,b,c):; // 注意有个':'

C语言中判断N个数中的素数并求和

C语言中判断N个数中的素数并求这些素数的和

参考技术A 要实现这个问题的解法,最好的方法是写一个判断整数,n是不是素数的函数。如果是素数就返回一,否则就返回零。这样逐个输入要判断的数。这个问题没有说清楚,要求和的对象是每一个数都要求和呢,还是是素数的才求和?

以上是关于c语言:遍历水仙花数n,判断是不是为素数,并返回结果。的主要内容,如果未能解决你的问题,请参考以下文章

如何用c语言编程判断一个数是否素数?

c语言 编写一个判断是不是为水仙花数的函数,并通过调用该函数打印输出所有水仙花数。

c语言中,如何输出所有的水仙花数

C语言中判断N个数中的素数并求和

c语言编程:设计一个函数用于判断一个数是不是为素数,如果是素数返回1,否则返回0。

如何用VB语言求水仙花数和求1~1000以内的素数