| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 489 人关注过本帖
标题:求范围内的水仙花数时进不了循环
只看楼主 加入收藏
hzliyilong
Rank: 2
等 级:论坛游民
帖 子:5
专家分:15
注 册:2014-7-21
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:6 
求范围内的水仙花数时进不了循环
程序代码:
#include<stdio.h>
#include<math.h>
int main()
{
    int min,max,need,i,num=0,needbak,bit;
    long sum=0;
    int a[10];
    printf("Please input the min number you need:\n");
    scanf("%d",&min);
    printf("Please input the max number you need:\n");
    scanf("%d",&max);
   
    need=max;    //[min,max]的遍历
    while(need>=min)
    {
        needbak=need;
        for(i=10;i>=0;i--)
        {
            a[i]=(long int)need/pow(10,i);
            //分出每一位数
            need=need-a[i]*pow(10,i);
        }
        for(i=10;i>=0;i--)
        {
            if(a[i]!=0) {bit=i+1;i=0;}
            //求取数字的位数
        }
        //以下是水仙花数的判断
        for(i=10;i>=0;i--)
        {
            sum=sum+pow(a[i],bit);
        }
        if(needbak==sum)
        {
            printf("%d    ",needbak);
            num++;
        }
        need=needbak;
        need--;
    }
    printf("\nThe numbers of the shuixianhua number is:%d\n",num);
    return(0);
}
在对初始值(need=500)进行了循环体中的内容后,gdb调试中max的值变成了0,导致条件不符进入不了循环。
结果:只能对范围内的一个数进行水仙花数的判断。
求各位的指教!
搜索更多相关主题的帖子: 水仙花 
2014-07-23 22:57
砖家的谎言
Rank: 12Rank: 12Rank: 12
等 级:禁止访问
威 望:30
帖 子:693
专家分:3898
注 册:2013-12-6
收藏
得分:8 
你把max的值赋给了need 那你就要跟踪你的need值变化来找问题所在

我不是砖家,要努力成为砖家。
2014-07-24 08:07
韶志
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:斗气大陆
等 级:贵宾
威 望:44
帖 子:2223
专家分:13592
注 册:2013-3-22
收藏
得分:8 
可以的啊,没问题
你要注意输入,水仙花数是三位数

图片附件: 游客没有浏览图片的权限,请 登录注册

三十年河东,三十年河西,莫欺少年穷!
2014-07-24 08:52
vvvcuu
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:12
帖 子:353
专家分:1253
注 册:2014-4-22
收藏
得分:4 
楼主知道pow()的原型吗?

a[i]=(long int)need/pow(10,i);
  强制转换的作用是什么?

程序代码:
for(i=10;i>=0;i--)
        {
            if(a[i]!=0) {bit=i+1;i=0;}
            //求取数字的位数
        }

这个地方的for循环你认为会执行几次?  i=0;的作用是什么?

代码测试环境:  WinXP+C-Free5.0.
2014-07-24 09:19
hzliyilong
Rank: 2
等 级:论坛游民
帖 子:5
专家分:15
注 册:2014-7-21
收藏
得分:0 
回复 2 楼 砖家的谎言
问题已解决,是用于比较的sum在第一轮后未重新初始化,导致以后的判断错误;只不过弄不明白为何将max赋值给need后max会变成0?(查看循环中,need的确会变0,可后来重新将needbak赋给need而max依然是0)还请指教。谢谢!
2014-07-24 11:11
hzliyilong
Rank: 2
等 级:论坛游民
帖 子:5
专家分:15
注 册:2014-7-21
收藏
得分:0 
回复 4 楼 vvvcuu
问题已解决,是用于比较的sum在第一轮后未重新初始化,导致以后的判断错误,谢谢关注;另外,pow()原型没查过,而强制类型转换作用类似高斯取整(不过用long好像有点多余),那个for循环会执行到a[i]的i从高到低第一次出现非0值,然后用i=0跳出循环。
2014-07-24 11:18
hzliyilong
Rank: 2
等 级:论坛游民
帖 子:5
专家分:15
注 册:2014-7-21
收藏
得分:0 
回复 3 楼 韶志
问题已解决,是用于比较的sum在第一轮后未重新初始化,导致以后的判断错误,谢谢关注;话说你是不是顺手帮我改好了啊,还是说VC++强大到可以令循环内的值自动初始化?不过我还真没用过VC来编译,真得试一下,不管怎么说:谢了!
2014-07-24 11:24
快速回复:求范围内的水仙花数时进不了循环
数据加载中...
 
   



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

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