所以可以依次通过模除求得每个位上的值,然后做n次幂后相加,再判断是否与本身相等,从而得到是否为水仙花数的结论.
以求所有三位数水仙花数为例,代码如下,其它相似.
#includestdio.h
#includestdlib.h
#includestdbool.h
int?cube(const?int?n){//计算立方.如果是四位则是四次方,以此类推.
return?n*n*n;
}
int?isNarcissistic(const?int?n){//计算是否为水仙花数.
int?hundreds=n/100;//百位
int?tens=n/10-hundreds*10;//十位
int?ones=n;//个位
return?cube(hundreds)+cube(tens)+cube(ones)==n;//如果相等,则为水仙花数.
int?main(void){
int?i;
for(i=100;i1000;++i){//对所有三位数判断.
if(isNarcissistic(i))//如果是则输出.
printf("%d\n",i);
return?0;
你需要对返回的数加一个判断,你的函数中,如果相等你有返回值,如果不相等你没有返回值,但是你的主函数中还是对这个没有返回的值进行了输出
#include?stdio.h
int?main()
{
int?f(int?m);
int?n;
printf?("result?is:?");
for?(n?=?100;?n?1000;?n++)
if?(f(n)0)/////////////////////////
printf?("%d?",?f(n)?);
printf?("\n");
int?f(int?m)
int?a,b,c;
a=m/100;
b=(m-a*100)/10;
c=m;
if(m==a*a*a+b*b*b+c*c*c)
return?(m);
else?return?-1;////////////////////////
你这里没有用到判断.所以它会把每个数都输出.
把is函数设成boolean类型的,如果是水仙花数就return true,如果不是就return false
就是if(number==i*i*i+m*m*m+n*n*n){ return true;)else return false;
...
这是你原来is函数里的一部分,按照上面那样改.
if(number==i*i*i+m*m*m+n*n*n){
return number;
下面这里是你的main函数的部分,
for(i=m;i=n;i++){
m=is(i);
printf("%d\n",m);
改成
if(is(i)){
就可以了
int li(int n)
{ return n*n*n;
int shuixian(int n)
int b,s,g;
b=n/100;
s=n/10;
g=n;
if((li(b)+li(s)+li(g))==n)
return 1;
return 0;
int main()
int i;
scanf("%d",i);
if(shuixian(i))
以上就是土嘎嘎小编为大家整理的c语言用函数写水仙花相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!