国产成人免费观看视频_亚洲国产激情_www.91视频com_www.久久_91视频全集_亚洲综合在

大学生新闻网,大学生新闻发布平台
大学生新闻网
大学生新闻大学生活校园文学大学生村官
社会实践活动社会实践经历社会实践报告社会实践总结社会实践心得
全国排名校友会版软科排名分类排名本科排名一本排名二本排名专科排名学校地址
求职简历职场法则面试技巧职场故事求职招聘大学生就业
英语学习计算机学习电气工程机械工程经济管理建筑设计财务会计
申请书证明书检讨书自荐信演讲稿心得体会调查报告读后感求职信推荐信其它范文

C语言求自守数

自守数是指一个数的平方的尾数等于该数自身的自然数。例如:

52 = 25 252 = 625 762 = 5776 93762 = 87909376

求100000以内的自守数。
问题分析
根据自守数的定义,求解本题的关键是知道当前所求自然数的位数,以及该数平方的尾数与被乘数、乘数之间的关系。
算法设计
若采用“求出一个数的平方后再截取最后相应位数”的方法显然是不可取的,因为计算机无法表示过大的整数。

分析手工方式下整数平方(乘法)的计算过程,以376为例:




本问题所关心的是积的最后三位。分析产生积的后三位的过程可以看出,在每一次的部分积中,并不是它的每一位都会对积的后三位产生影响。总结规律可以得到:在三位数乘法中,对积的后三位产生影响的部分积分别为:

第一个部分积中:被乘数最后三位×乘数的倒数第一位。
第二个部分积中:被乘数最后二位×乘数的倒数第二位。
第三个部分积中:被乘数最后一位×乘数的倒数第三位。

将以上的部分积的后三位求和后,截取后三位就是三位数乘积的后三位,这样的规律可以推广到同样问题的不同位数乘积中。
分离给定数中的最后几位
从一个两位数(存在变量n中)开始分析,分离最低位个位n%10;对于三位数n,分离最后两位n%100;对于四位数n,分离最后三位n%1000;...,由此可见,若分离出最后x位,只需要用原数对 10x 求余。

从第3部分所举例子可以看出,对于第二个部分积“2632”来说其实应是“26320”, 因为对于乘数中的倒数第二位“7”来说,因其在十位,对应的权值为10,第二个部分积实质上为:376X70=26320。故求部分积的程序段为:


int main ()
{
    //...
    while(k>0)
    {
        mul=( mul + ( number%(k*10) )*( number%b - nxuober%(b/10) ) )%a;
        /* (部分积+截取被乘数的后N位*截取乘数的第M位),%a再截取部分积*/
        k /= 10;  /*k为截取被乘数时的系数*/
        b *= 10;
    }
    //...
    return 0;
}
对于整个循环来说,变量k是由number的位数确定截取数字进行乘法时的系数。第1次执行循环体时,被乘数的所有位数都影响到平方的尾数,因此第1个部分积=被乘数*乘数的最后一位,将部分积累加到变量mul上,再对a取余截取相应的尾数位数;第2次执行循环体,影响平方尾数的是被乘数中除了最高位之外的数(所以k先除以10再参加运算),第2个部分积=被乘数*乘数的倒数第二位,( number%b - number%(b/l0) )用来求乘数中影响平方尾数的对应位上的数;第3次、第4次执行循环体的过程同上。

程序流程图:



下面是完整的代码:

#include<stdio.h>
int main()
{
    long mul, number, k, a, b;
    printf("It exists following automorphic nmbers small than 100000:\n");
    for( number=0; number<100000; number++ )
    {
        for( mul=number, k=1; (mul/=10)>0; k*=10 );
        /*由number的位数确定截取数字进行乘法时的系数k*/
        a = k * 10;  /*a为截取部分积时的系数*/
        mul = 0;  /*积的最后n位*/
        b = 10;  /*b为截取乘数相应位时的系数*/
        while(k>0)
        {
            mul=( mul + ( number%(k*10) )*( number%b - number%(b/10) ) )%a;
            /*(部分积+截取被乘数的后N位*截取乘数的第M位),%a再截取部分积*/
            k /= 10;  /*k为截取被乘数时的系数*/
            b *= 10;
        }
        if(number == mul)  /*判定若为自守数则输出*/
            printf("%ld   ", number);
    }
    printf("\n");
    
    return 0;
}</stdio.h>
运行结果:
It exists following automorphic nmbers small than 100000:
0 1 5 6 25 76 376 625 9376 90625
    作者:大学生新闻网    来源:大学生新闻网
    发布时间:2025-03-11    阅读:
    扫一扫 分享悦读
  • C语言水仙花数
  • 输出所有的“水仙花数”,所谓的“水仙花数”是指一个三位数其各位数字的立方和等于该数本身,例如153是“水仙花数”,因为:153 = 13
  • 03-11 关注:0
  • C语言求自守数
  • 自守数是指一个数的平方的尾数等于该数自身的自然数。
  • 03-11 关注:0
  • C语言求亲密数
  • C语言求亲密数
  • 如果整数A的全部因子(包括1,不包括A本身)之和等于B;且整数B的全部因子(包括1,不包括B本身)之和等于A
  • 03-11 关注:0
  • C语言求完数(完全数)
  • C语言求完数(完全数)
  • 如果一个数等于它的因子之和,则称该数为“完数”(或“完全数”)。例如,6的因子为1、2、3,而 6=1+2+3,因此6是“完数”。
  • 03-11 关注:1
  • C语言输出菱形(详解版)
主站蜘蛛池模板: 国产精品一亚洲av日韩av欧 | 久久大香伊蕉在人线国产昨爱 | 国产网站免费在线观看 | 国产成人高清亚洲一区91 | 粉嫩在线| 久久一区二区精品综合 | 国产小视频免费在线观看 | 亚洲日韩成人无码 | 欧美一级片观看 | 好吊妞国产欧美日韩免费观看 | 国产成人成人一区二区 | 伊人久久综合成人网小说 | 国产欧美日韩综合一区二区三区 | 午夜性色福利在线视频福利 | 国内精品999| 情侣黄网站免费看 | 欧美综合精品一区二区三区 | 91香蕉视频官网 | 小明成人永久视频在线观看 | 久久亚洲精品国产精品婷婷 | 亚洲精品久久国产高清 | 天天av天天翘天天综合网色鬼 | 欧美精品a毛片免费观看 | 亚洲国产精品高清在线一区 | 久久99精品久久久久久综合 | 美女被免费网站视频九色 | 亚洲欧洲淘宝天堂日本 | 国产99视频精品免费视频免里 | 亚洲中文无码a∨在线观看 亚洲中文无码av在线 | 男人又粗又硬桶女人免费 | 女人被爽到呻吟gif动态图视看 | 亚洲国产一区二区在线 | 久久久亚洲欧洲国产 | 公么看我喂奶水涨帮我吃小说 | 18禁高潮出水呻吟娇喘蜜芽 | 太粗太深了太紧太爽了动态图男男 | 91麻豆高清国产在线播放 | 欧美老人巨大xxxx做受 | 国产美女露脸口爆吞精 | 一本久久精品一区二区 | 欧美日韩欧美 |