| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1268 人关注过本帖
标题:求自守数的个数
只看楼主 加入收藏
香菱
Rank: 1
等 级:新手上路
帖 子:24
专家分:0
注 册:2014-4-4
收藏
得分:0 
谢谢各位
2014-04-23 22:38
vvvcuu
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:12
帖 子:353
专家分:1253
注 册:2014-4-22
收藏
得分:0 
回复 8 楼 Andrew_Lee
我自己试着写了一下程序.  算法是这样的, 用pow()取得输入的位数的上下限的值,然后for循环.  如果一个数的平方与该数字的差能够整除10的位数次方,那么输出该数字.  
代码如下:
程序代码:
#include "stdio.h"
#include "math.h"
int main()
{
    int a,b,c,d,f,g,i;
    printf("本程序用来输入指定位数的自守数.\n");
    printf("请输入你想要的自守数的位数;\n");
    scanf("%d",&a);
    b=pow(10,a-1);
    c=pow(10,a); 
    d=c-1;
    for(i=b;i<=d;i++)
    {
        f=i*i;
        g=f-i;        
        if(g%c==0)printf("%d,",i);        
    }
    return 0; 
}

输入1的时候还能正确输出,得到结果1,5,6.
可是输入2的时候就不行了,输出结果是45和55,这是为何?
pow()函数的问题?  该如何处理?

[ 本帖最后由 vvvcuu 于 2014-4-24 11:02 编辑 ]

代码测试环境:  WinXP+C-Free5.0.
2014-04-24 10:58
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
收藏
得分:0 
看了你的消息,我很无奈。你没有理解我的代码么?调试跟进一下,看看fun函数的功能。


[fly]存在即是合理[/fly]
2014-04-24 12:59
Andrew_Lee
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:3
帖 子:185
专家分:626
注 册:2014-3-21
收藏
得分:0 
回复 12 楼 vvvcuu
pow函数是的参数和返回值都是float类型的。在我电脑上运行没什么问题,你强制类型转换下试试
2014-04-24 17:46
vvvcuu
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:12
帖 子:353
专家分:1253
注 册:2014-4-22
收藏
得分:0 
回复 14 楼 Andrew_Lee
不知道怎么回事.  在我这强制类型转换也不行, 输入2还是输出45,55.  不过貌似算法是正确的. 可能对C基础还不熟吧, 继续学习基础.  

麻烦看一下这段代码好吗?

程序代码:
#include<stdio.h>
int main(void)
{
    while(getchar()!='eof'){
        printf("中华人民和国\n") ;
        while(getchar()!='\n')
        break;
    }
    return 0;
}

这里两个while,两个getchar(),还有break是如何执行的?  搞不明白呢.

代码出自这个帖子,地址在这:https://bbs.bccn.net/thread-430410-1-1.html

代码测试环境:  WinXP+C-Free5.0.
2014-04-24 19:17
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
收藏
得分:0 
回复 15 楼 vvvcuu
你倒是跟踪调试一下呀,看看打45时g和c都等于多少?c语言就这点有意思,你还半途而废

总有那身价贱的人给作业贴回复完整的代码
2014-04-24 20:16
vvvcuu
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:12
帖 子:353
专家分:1253
注 册:2014-4-22
收藏
得分:0 
回复 16 楼 embed_xuel
跟踪了下. 搞不明白怎么回事啊.难道与编译器或者操作系统有关?

输入1的时候能输出正确答案.  输入2的时候,c竟然不是100,而是99.
然后改成c=pow(10,a)+1;,可以通过.能够输出正确结果.

但按照上面的该法,输入3的时候又错了, c变成了1001. 头都大了.

代码测试环境:  WinXP+C-Free5.0.
2014-04-24 20:42
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
收藏
得分:0 
回复 17 楼 vvvcuu
在网上搜到的,
在TC2.0中原型为extern float pow(float x, float y); ,而在VC6.0中原型为double pow( double x, double y );

总有那身价贱的人给作业贴回复完整的代码
2014-04-24 20:48
Andrew_Lee
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:3
帖 子:185
专家分:626
注 册:2014-3-21
收藏
得分:0 
回复 15 楼 vvvcuu
这个break就比较简单了,就是当内层while循环不满足的时候,内层循环终止,执行下一次外层循环。

2014-04-27 15:06
香菱
Rank: 1
等 级:新手上路
帖 子:24
专家分:0
注 册:2014-4-4
收藏
得分:0 
回复 13 楼 azzbcc
我已理解,刚开始没仔细看,但是改完后会出现数的顺序不对,比如输入3时,输出625,376,但是要求输出376,625
2014-04-28 11:28
快速回复:求自守数的个数
数据加载中...
 
   



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

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