| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2940 人关注过本帖
标题:输入水仙花数
只看楼主 加入收藏
王会会
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2016-11-3
结帖率:0
收藏
已结贴  问题点数:20 回复次数:5 
输入水仙花数
水仙花数是指一个N位正整数(N≥3),它的每个位上的数字的N次幂之和等于它本身。例如:。 本题要求编写程序,计算所有N位水仙花数。
输入
输入在一行中给出一个正整数N(3≤N≤7)。
搜索更多相关主题的帖子: 编写程序 水仙花 正整数 
2016-11-03 22:38
陈CDG
Rank: 2
等 级:论坛游民
帖 子:17
专家分:57
注 册:2016-4-11
收藏
得分:5 
水仙花曾今有人问过并有人回答过
[b]以下是引用RWBY在2015-11-15 22:58:14的发言:用for循环仅能解决三位数的水仙花。


程序代码:
#include <stdio.h>

int main( void )
{
    unsigned map[11][9];
    for( unsigned n=0; n!=11; ++n )
    {
        map[n][0] = 1;
        for( unsigned m=1; m!=9; ++m )
            map[n][m] = map[n][m-1] * n;
    }

    for( unsigned n=100,m=3; n!=100000000; ++n )
    {
        if( n >= map[10][m] )
            ++m;

        unsigned sum = 0;
        for( unsigned t=n; t; t/=10 )
            sum += map[t%10][m];

        if( sum == n )
            printf( "%u\n", n );
    }

    return 0;
}
输出
153
370
371
407
1634
8208
9474
54748
92727
93084
548834
1741725
4210818
9800817
9926315
24678050
24678051
88593477

2016-11-03 22:56
魑魅
Rank: 1
等 级:新手上路
帖 子:77
专家分:9
注 册:2016-9-18
收藏
得分:0 
水仙花数是一个数,题目要求三位数到七位数所以
程序代码:
#include <stdio.h>
#include <stdlib.h>

/* run this program using the console pauser or add your own getch, system("pause") or input loop */

int main(int argc, char *argv[]) {
    int x,a,b,c;
    x=0,a=0,b=0,c=0;
    for(x=100;x<=9999999;x++){
        a=x/100;
        b=(x/10)%10;
        c=x%10;
    if(x==a*a*a+b*b*b+c*c*c){
        printf("%d\n",x);
    }
}
    return 0;
}
2016-11-04 07:52
魑魅
Rank: 1
等 级:新手上路
帖 子:77
专家分:9
注 册:2016-9-18
收藏
得分:0 
多用几个for循环,最后一个if判断输出就可以了,我那个只是一部分
2016-11-04 07:57
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:5 
回复 4楼 魑魅
[quote]以下是引用王会会在2016-11-3 22:38:59的发言:

水仙花数是指一个N位正整数(N≥3),它的每个位上的数字的N次幂之和等于它本身。
[quote]以下是引用魑魅在2016-11-4 07:52:01的发言:

水仙花数是一个数,题目要求三位数到七位数所以
程序代码:
#include <stdio.h>
#include <stdlib.h>

/* run this program using the console pauser or add your own getch, system("pause") or input loop */

int main(int argc, char *argv[]) {
    int x,a,b,c;
    x=0,a=0,b=0,c=0;
    for(x=100;x<=9999999;x++){
        a=x/100;
        b=(x/10)%10;
        c=x%10;
    if(x==a*a*a+b*b*b+c*c*c){
        printf("%d\n",x);
    }
}
    return 0;
}



你的不会是把水仙花数当作3次方吧,看题目

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2016-11-04 08:16
枫双
Rank: 1
等 级:新手上路
帖 子:26
专家分:5
注 册:2016-8-10
收藏
得分:5 
#include<stdio.h>
int main()
{
    int a;
    int cnt=0;
    int i,j;
    int sum=0,sum1=1;
    int m,b;
    for(i=100;i<=10000;i++)
    {
            
        a=i;
        b=i;
        
       while(a>0)//计算i的位数是3位还是4位
       {
        a /=10;
        cnt++;
       }
  
      while(b>0)//把这个数每一位都分开,
      {
           m=b%10;
           b=b/10;
           for(j=1;j<=cnt;j++)
           {
               sum1=sum1*m;
               
           }
           sum=sum+sum1;
           sum1=1;
      }
       if (sum==i)
       {
           
           printf("%d\n",i);
           
       }
        sum=0;
        cnt=0;
    }


}
这个是我以前写的比较简单的求解水仙花的程序,可以求任意范围内的水仙花数,只要在程序中修改范围即可。
2016-11-04 09:50
快速回复:输入水仙花数
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.024477 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved