| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1520 人关注过本帖, 1 人收藏
标题:Smith数问题,请大家帮忙啊!谢谢~
只看楼主 加入收藏
qishiye007
Rank: 2
等 级:论坛游民
帖 子:19
专家分:20
注 册:2011-2-16
收藏
得分:0 
回复 20楼 pcbaichi
行。谢谢!
2011-02-16 22:25
pcbaichi
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
帖 子:486
专家分:1185
注 册:2010-11-13
收藏
得分:0 
同学你先给我分吧,这么晚回答问题不容易啊

免费赠送河蟹一只
2011-02-16 22:26
qishiye007
Rank: 2
等 级:论坛游民
帖 子:19
专家分:20
注 册:2011-2-16
收藏
得分:0 
回复 22楼 pcbaichi
不好意思,分不多、
2011-02-16 22:29
lonmaor
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:郑州
等 级:版主
威 望:75
帖 子:2637
专家分:6423
注 册:2007-11-27
收藏
得分:0 
程序代码:
#include <stdio.h>

int totalNum(int n) //求自然数n各位数字和
{
    int total_num = 0;
    while(n%10)
    {
        total_num+=n%10;
        n/=10;
    } //得出n各位数字和
    return total_num;
}

int isPrime(int n)
{
    int i;
    if (n==2) return 1;
    else
        for(i=2; i!=n; ++i)
        {
            if(n%2 == 0) break;
        }
    return (i==n)?1:0;
}

int isSmith(int n) //是否是smith数
{
    int i;
    int total_num = 0;
    int t = n; //临时变量
    for(i = 2; i!=n; ++i)
    {
        if (isPrime(i)) //如果i为质数
        {
            while(!(t%i))
            {
                total_num+=totalNum(i);
                t/=i;
            }
        }
    }
    return (total_num == totalNum(n))?1:0;

}

int main()
{
    int t;
    while(scanf("%d",&t) && t)
    {
        puts(isSmith(t)?"yes":"no");
    }
    return 0;
}

大半夜的,动动脑子不容易啊,啥时候才能写出孔明兄那么精简的代码

从不知道到知道,到知道自己不知道,成长的道路上脚步深深浅浅
2011-02-16 22:45
CCFzeroOH
Rank: 2
等 级:论坛游民
帖 子:79
专家分:85
注 册:2009-12-22
收藏
得分:0 
for(i=3; i<n && i%2!=0; i++) //求其所有因子的各个位之和
        {
            if(n%i==0)
            {
                p=i;

                while(p!=0)
                {
                    a[j]+=p%10;
                    p=p/10;
                }
               
                j++;
           
             n=n/i;
            }
        }

这错了,判断条件不对,不能i%2==0就退出
2011-02-17 10:31
CCFzeroOH
Rank: 2
等 级:论坛游民
帖 子:79
专家分:85
注 册:2009-12-22
收藏
得分:0 
回复 24楼 lonmaor
int isPrime(int n)
{
    int i;
    if (n==2) return 1;
    else
        for(i=2; i!=n; ++i)
        {
            if(n%2 == 0) break;
        }
    return (i==n)?1:0;
}

这个函数不对吧???应改为
int isPrime(int n)
{
    int i;
    if (n==2) return 1;
    else
        for(i=2; i<sqrt(n); ++i)
        {
            if(n%i == 0) break;
        }
    return (i==n)?1:0;
}
2011-02-17 10:36
lonmaor
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:郑州
等 级:版主
威 望:75
帖 子:2637
专家分:6423
注 册:2007-11-27
收藏
得分:0 
程序代码:
int isPrime(int n)
{
    int i;
    if (n==2) return 1;
    else
        for(i=2; i<sqrt(n); ++i)
        {
            if(n%i == 0) break;
        }
    return (i==n)?1:0;
} 

奇怪,在我的codeblock里,一使用sqrt(n)做临界条件,就判断错误。
if(n%i == 0) break; 这句的改动是对的,我居然没注意到,源程序居然能偶尔判断通过。

从不知道到知道,到知道自己不知道,成长的道路上脚步深深浅浅
2011-02-17 11:44
qishiye007
Rank: 2
等 级:论坛游民
帖 子:19
专家分:20
注 册:2011-2-16
收藏
得分:0 
回复 27楼 lonmaor
谢谢!我试试、
2011-02-17 11:50
qishiye007
Rank: 2
等 级:论坛游民
帖 子:19
专家分:20
注 册:2011-2-16
收藏
得分:0 
回复 25楼 CCFzeroOH
谢谢!
2011-02-17 11:51
快速回复:Smith数问题,请大家帮忙啊!谢谢~
数据加载中...
 
   



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

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