| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 9521 人关注过本帖
标题:自守数是指一个数的平方的尾数等于该数自身的自然数。如:76的平方=5776,求 ...
只看楼主 加入收藏
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:4 
图片附件: 游客没有浏览图片的权限,请 登录注册

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
main()
{
    int i, j, k, m, n;
    for (i=1; i<=20000000; ++i)
    {
        k = i%10;
        if (k!=1 && k!=5 && k!=6)
            continue;
        k = 0;
        for (n=1,m=i,j=log10(i)+1; j>0; --j,m/=10,n*=10)
            k += (i%(int)pow(10,j)) * n*(m%10);
        if (k%n == i)
            printf("%d\n", i);
    }
}
2017-04-20 20:34
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
回复 11楼 吹水佬
看懂了~就是按位计算平方的部分尾数来避免数据溢出~~~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-04-20 22:16
yangfrancis
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:贵宾
威 望:141
帖 子:1510
专家分:7661
注 册:2014-5-19
收藏
得分:0 
回复 10楼 xzlxzlxzl
主要脑筋都是动在避免数据溢出上。为免溢出所做的动作比算答案本身还多,结果也就拖慢了。
2017-04-20 22:21
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:0 
图片附件: 游客没有浏览图片的权限,请 登录注册

#include <stdio.h>
main()
{
    int nn = 100000001;
    int n, c, k, m;
    for (n=1; n<nn; ++n)
    {
        c = n;
        m = 0;
        for (;;)
        {
            if (c == 0)
            {
                printf("%d\n", n);
                break;
            }
            k = c % 10;
            m += k * n;
            if (m%10 != k)
                break;
            m = m / 10;
            c = c/10;
        }
    }
}
2017-04-20 23:04
yangfrancis
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:贵宾
威 望:141
帖 子:1510
专家分:7661
注 册:2014-5-19
收藏
得分:0 
回复 14楼 吹水佬
能简单说下思路吗?谢谢
2017-04-21 10:04
yangfrancis
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:贵宾
威 望:141
帖 子:1510
专家分:7661
注 册:2014-5-19
收藏
得分:0 
好像看出来了
2017-04-21 10:05
yangfrancis
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:贵宾
威 望:141
帖 子:1510
专家分:7661
注 册:2014-5-19
收藏
得分:0 
回复 14楼 吹水佬
能简单说下思路吗?谢谢
2017-04-21 10:05
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:0 
以下是引用yangfrancis在2017-4-21 10:05:34的发言:

能简单说下思路吗?谢谢

就是逐位乘比对个位
如:

1、m=0
   n=625
   c=625, k=c%10=5
 ---------
   k*n=625*5=3125  
   m+=k*n=0+3125=3125, m%10=5 与k比对,不等n不是自守

2、m=m/10=312
   n=625
   c=c/10=62, k=c%10=2
   -----------
   k*n=2*625=1250
   m+=k*n=312+1250=1562, m%10=2 与k比对,不等n不是自守

3、m=m/10=156
   n=625
   c=c/10=6, k=c%10=6
   -----------
   k*n=6*625=3750
   m+=k*n=156+3750=3906, m%10=6 与k比对,不等n不是自守

4、c=c/10=0 结束,每一位都对上,n是自守。
2017-04-21 11:12
yangfrancis
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:贵宾
威 望:141
帖 子:1510
专家分:7661
注 册:2014-5-19
收藏
得分:0 
回复 18楼 吹水佬
谢谢。很受益
2017-04-21 22:06
快速回复:自守数是指一个数的平方的尾数等于该数自身的自然数。如:76的平方=57 ...
数据加载中...
 
   



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

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