| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2079 人关注过本帖
标题:"水仙花“数
只看楼主 加入收藏
欧阳君雅
Rank: 1
等 级:新手上路
帖 子:71
专家分:0
注 册:2008-9-29
收藏
得分:0 
你拿到计算机上去运行了吗?
2008-10-22 22:06
欧阳君雅
Rank: 1
等 级:新手上路
帖 子:71
专家分:0
注 册:2008-9-29
收藏
得分:0 
如果把king和green设成long型的话会更好。。。
2008-10-22 22:16
蓝色线段树
Rank: 1
等 级:新手上路
帖 子:86
专家分:0
注 册:2008-10-18
收藏
得分:0 
我在5楼所说的你是不是当看不见??
2008-10-22 22:48
蓝色线段树
Rank: 1
等 级:新手上路
帖 子:86
专家分:0
注 册:2008-10-18
收藏
得分:0 
四位的时候有如下三个解
1634
8208
9474
注意是各位的四次方和

假如固定是三次方,那你何必要去做任意n位?
假如真是这样那么不是三位数的直接Kick掉就是了,结果是任意n位是无意义的
2008-10-22 22:54
欧阳君雅
Rank: 1
等 级:新手上路
帖 子:71
专家分:0
注 册:2008-9-29
收藏
得分:0 
新的,要怪怪楼主错题,我是无辜的。。。下面是更正的程序。。。


#include"stdio.h"
#include"stdlib.h"
void  check(long king)
{
    long queen;
    long sum=1,SUM=0;
    int i,j,k;
    int *p,*q;
    queen=king;
    for(i=1;i<99;i++)
    {
        if(king/=10)
            continue;
        else
            break;
    }
    king=queen;
    p=(int *)calloc(i,sizeof(int));
    q=p;
    for(j=0;j<i;j++)
    {
        *p=king%10;
        for(k=0;k<i;k++)
            sum*=(*p);
        SUM+=sum;
        king/=10;
        sum=1;
        p++;
    }
    free(q);
    if(SUM==queen)
        printf("%ld\n",queen);    
}
void main()
{
    long x;
    long max,min=1;
    int n;
    printf("请输入你想求的水仙花数的位数:");
    scanf("%d",&n);
    while(--n)
        min*=10;
    max=min*10-1;
    for(x=min;x<max;x++)
        check(x);
}
2008-10-22 23:59
欧阳君雅
Rank: 1
等 级:新手上路
帖 子:71
专家分:0
注 册:2008-9-29
收藏
得分:0 
printf("请输入你想求的水仙花数的位数:");
意思是这个数是几位数。。。
2008-10-23 00:00
欧阳君雅
Rank: 1
等 级:新手上路
帖 子:71
专家分:0
注 册:2008-9-29
收藏
得分:0 
修正个BUG,倒数第三行 max=min*10-1;
改为:max=min*10,也就是去掉那个减1
2008-10-23 00:04
lzlyms
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2008-10-18
收藏
得分:0 
回复 7# 欧阳君雅 的帖子
不管是不是0  如100  1*1*1+0*0*0+0*0*0!=100 就不是
2008-10-23 08:11
lzlyms
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2008-10-18
收藏
得分:0 
回复 14# 蓝色线段树 的帖子
呵呵,不好意思 没写清楚
2008-10-23 08:13
woshiyun
Rank: 1
等 级:新手上路
威 望:2
帖 子:348
专家分:0
注 册:2008-6-16
收藏
得分:0 
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAX_NUMBER 10000000

int my_pow(int n, int m) //用math.h里的pow比较慢,所以自己写了
{
    int sum=1;
    while(m--) sum*=n;
    return sum;
}
int isSXH(int n)
{
    char str[20];
    int size,sum=0;
    itoa(n, str, 10);
    size = strlen(str);
    for(int i=0;i<size;i++) sum+=my_pow((str[i]-'0'),size);
    if(sum == n) return 1;
    return 0;
}
int main()
{
   for(int n=1;n<MAX_NUMBER;n++)
   {
       if(isSXH(n)) printf("%d\n",n);
   }
   return 0;
}

简单写了一个。
1. 位数小于8位还可以,到8位就得等一会儿了,到9位我估计是不能忍受了。
2. 如果要再大的位数,还有int的越界问题,这里不考虑了。
2008-10-23 08:50
快速回复:"水仙花“数
数据加载中...
 
   



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

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