| 编程中国 | 业界新闻 | 技术文章 | 视频教程 | 下载频道 | 程序源码 | 个人空间 | 编程论坛
全能ASP/PHP/ASP.NET主机,支持月付专业 MSSQL 数据库空间,支持月付专业 MySQL 数据库空间,支持月付学习型 ASP/PHP/ASP.NET 主机 30元/年
高端软件开发 = 年薪十万不是梦赛孚耐:软件保护加密专家身份认证令牌USB KEY 
共有 542 人关注过本帖
标题:求助:求小于max的所有水仙花数的解释
收藏  订阅  推荐  打印 
tangzhongliu
Rank: 1
等级:新手上路
帖子:25
积分:350
注册:2005-2-10
求助:求小于max的所有水仙花数的解释

/* 求小于max的所有水仙花数*/

#include "Stdio.h" #include<math.h> #include<time.h> int arm_number(int max); int main() { int max,second; time_t t; printf("input the max number:"); scanf("%d",&max); second=time(&t); arm_number(max); second=time(&t)-second; printf("The total times is:%d\n",second); return 0;

} int arm_number(int max) { int num,radix=10,x,y,time=0; for(num=100;num<=max;num++) { int n=0,power=1,total=0; while(power<=num) { power=power*radix; n++; time++; } while(power>=10) { x=(num%power)/(power/10); y=n; total+=(int)pow(x,y); power=power/10; time++; } if(total==num) printf("The arm number is:%d\n",num); } printf("The times of computed is:%d\n"); return 0; } 只因水平有限,这个程序看了半天也没有明白每步都什么意思,只好麻烦各位高手了,谁能帮我解释一下各个步骤的意思啊,谢谢了!!

搜索更多相关主题的帖子: 水仙花  max  解释  
2005-2-26 23:47
freeforever
Rank: 3Rank: 3
等级:中级会员
威望:3
帖子:269
积分:2814
注册:2005-11-2

#include "Stdio.h"
#include<math.h>
#include<time.h>
#include <stdlib.h>
int arm_number(int max);
int main()
{
    int max,second;
    time_t t;//计时变量
    printf("input the max number:"); //提示输入
    scanf("%d",&max); //输入max,下面计算<max的水仙花数
    second=time(&t); //计时开始
    arm_number(max); //调用函数
    second=time(&t)-second; //计算时间
    printf("The total times is:%d\n",second); //显示耗时
    system("pause");//屏幕暂停
    return 0;//函数返回
}
int arm_number(int max)
{
    int num,radix=10,x,y;//,time=0; 不知道這個Time是什麼意思,我給註釋掉了
    for(num=100;num<=max;num++) //100以下不存在水仙花数
    {
        int n=0,power=1,total=0;
        while(power<=num)
        { //計算Num的長度
            power=power*radix;
            n++; //長度
            //time++;
        } //每循环完Power是Num的最小整數
        while(power>=10)
        {
            x=(num%power)/(power/10); //取其中一位
            //y=n;
            total+=(int)pow(x,n); //累加當前位的N次方
            power=power/10;
            //time++;
        }
        if(total==num) //满足条件则输出
        printf("The arm number is:%d\n",num);
    }
    //printf("The times of computed is:%d\n",time);
    return 0;
}
/*
看過很多關於"水仙花數"的帖子,第一次看到沒有把它限制成三位數
我個人也不同意它是三位數的看法,試算下大於912985153的下一個數是多少吧
*/

http://useforprogram.blogcn.com
2007-11-25 18:07
永夜的极光
Rank: 12Rank: 12Rank: 12
等级:版主
威望:17
帖子:2666
积分:34005
注册:2007-10-9

这么代码写成这样,当然看不明白了

从BFS(Breadth First Study)到DFS(Depth First Study)
学习VIM中,欢迎访问我的blog  http://hi.baidu.com/newkedison
严重鄙视一切把论坛当成作业生成器和人肉搜索引擎的人
2007-11-25 18:39
cosdos
Rank: 6Rank: 6
来自:ShangHai
等级:金牌会员
威望:1
帖子:1377
积分:14374
注册:2007-6-19

/* 我写的一个简单的穷举法 */

#include <stdio.h>
#define MAX 999      /* 我从没看到过超过3位的水仙花数,设更大也可以 */

int main(void)
{
    int ar[10];
    int i = 100, j, k, m;

    while(i < MAX)
    {
        j = i;
        m = 0;
        while(j)
        {
            k = j % 10;
            m += (k * k * k);
            j /= 10;
        }
        if(m == i)
            printf("%d\n", i);
        i++;
    }
   
    printf("100 - %d.\n\nDone.", i);
    getchar();
    return 0;
}

[[italic] 本帖最后由 cosdos 于 2007-11-25 19:25 编辑 [/italic]]

—>〉Sun〈<—
2007-11-25 19:19
关于我们 | 广告合作 | 编程中国 | 清除Cookies | Archiver | WAP | TOP

编程中国 版权所有,并保留所有权利。鲁ICP备08000592号
Powered by Discuz, Processed in 0.054919 second(s), 9 queries.
Copyright©2004-2008, BCCN.NET, All Rights Reserved