| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 609 人关注过本帖
标题:谁能讲解一下这个程序的具体步骤?
只看楼主 加入收藏
vdestroyer
Rank: 2
等 级:论坛游民
帖 子:136
专家分:14
注 册:2009-1-7
结帖率:96.43%
收藏
已结贴  问题点数:20 回复次数:4 
谁能讲解一下这个程序的具体步骤?
我们发现,有一个6位数,639172,它的平方等于一个数。
639172^2=408540845584
而这个式子有两个特点:
其一,639172这个6位数,没有一位数字互相之间是相同的。也就是说,很容易看出来,个位上是个2,这个2就没有在其它为数上出现过。
另外,数字408540845584 里面的所有数字都没有和 639172里的数字重复。

还有一个6位数,也符合上面这个例子的条件,找是哪个数。。。。。。。。

下面这个程序就是算这个数的:
主要帮我解释一下ChckNum里面的东西
比如for语句问什么可以这样写       for(;n;n/=10)
temp前面的++又怎么解释等等        if(++temp[n%10]>1) return 0;


#include <stdio.h>
int CheckNum(__int64 n)
{
    char temp[10] = {0};
    __int64 longn=n*n;
    for(;n;n/=10) if(++temp[n%10]>1) return 0;
    for(;longn;longn/=10) if(temp[longn%10]>0) return 0;
    return 1;
}
void main()
{
    for(int n=123456;n<=987654;n++) if(CheckNum(n)) printf("%d\n", n);
}
搜索更多相关主题的帖子: 讲解 
2009-07-21 19:27
vdestroyer
Rank: 2
等 级:论坛游民
帖 子:136
专家分:14
注 册:2009-1-7
收藏
得分:0 
没人帮忙啊。。。哎。。
这种写法从来没见过啊。。
2009-07-23 00:36
广陵绝唱
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:29
帖 子:3607
专家分:1709
注 册:2008-2-15
收藏
得分:20 
回复 2楼 vdestroyer
作者的写法很巧妙,利用数组的下标值来确定这个数字有没有出现过。如你所问的 for 的写法问题是基础问题,看看书就会知道为什么;而 ++temp[n%10]>1 以及下面循环中的 temp[longn%10]>0 都是为了检查该位数字有没有出现过。

    其实这个程序仔细看一下就会理解,您慢慢再想一想吧。
2009-07-23 01:01
himpo
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:192
专家分:123
注 册:2008-5-16
收藏
得分:0 
这个程序很牛...

受教了...
2009-07-23 09:05
金多虾
Rank: 2
等 级:论坛游民
帖 子:153
专家分:99
注 册:2009-6-9
收藏
得分:0 
这种写法从来没见过啊
这种写法从来没见过啊
2009-07-23 14:00
快速回复:谁能讲解一下这个程序的具体步骤?
数据加载中...
 
   



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

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