自守数算法

算法举例

//自守数算法

例如:

25 ^ 2 = 625 76 ^ 2 = 5776 9376 ^ 2 = 87909376

例如:

376 被乘数

376 乘数

------ ---------

2256 第一个部分积=被乘数*乘数的倒数第一位

2632 第二个部分积=被乘数*乘数的倒数第三位

1125 第三个部分积=被乘数*乘数的倒数第三位

--------

141376

将以上的部分积的后3位求和后截取后3位就是3位数乘积的后3位。

C语言实现

 1#include <stdio.h>
 2
 3/*由number的位数确定截取数字进行乘法时的系数k*/
 4#define forech_bit_num(mul,number,k)  \
 5            for(mul=number,k=1;(mul/=10)>0;k*=10) ;
 6//在0~xxxx这些数中寻找自守数
 7#define forech_number(number,num)     \
 8            for(number=0;number<num;number++)
 9//自守数核心算法:(部分积+截取被乘数的后N位*截取乘数的第M位),%kk再截取部分积
10#define automorphic_number(mul,number,k,ll,kk)   \
11        mul=(mul+(number%(k*10))*(number%ll-number%(ll/10)))%kk;
12long print_automorphic_number(long num)
13{
14    long mul,number,k,ll,kk;
15    forech_number(number,num)
16    {
17        forech_bit_num(mul,number,k);
18        kk=k*10;      /*kk为截取部分积时的系数*/
19        mul=0;        /*积的最后n位*/
20        ll=10;        /*ll为截取乘数相应位时的系数*/
21        while(k > 0)
22        {
23            automorphic_number(mul,number , k ,ll ,kk);
24            k/=10;               /*k为截取被乘数时的系数*/
25            ll*=10;
26        }
27         if(number==mul){         /*判断若为自守数则输出*/
28              printf("%ld   ", number);
29         }
30    }
31
32}
33
34int main(void)
35{
36    print_automorphic_number(1000);
37    return 0 ;
38}

运行结果:

本文分享自微信公众号 - 嵌入式开发圈(gh_d6ff851b4069)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-06-16

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 0650-6.2.0-通过UDF实现Hive&Impala的中文拼音排序

    由上面两张图可以看出,在Hive和Impala中排序都失败了,没有按照期望中的中文对应的拼音进行排序。

    Fayson
  • 新用户引导UI界面,这么设计才更优秀!

    新用户引导绝对是个瓶颈。花费时间设计和开发,找了用户测试调研,最后上线了,依然拦不住汹涌的用户流失潮。

    用户5009027
  • tf.image.non_max_suppression

    贪婪地选择按得分降序排列的边界框子集。删除与先前选择的框具有高交叉-过度联合(IOU)重叠的框。边界框以[y1, x1, y2, x2]的形式提供,其中(y1,...

    于小勇
  • 轻松玩转 MySQL 8.0 源码编译

    此前我最后一次编译 MySQL 源码大概 10 年前了,再后来有人问我怎么编译源码安装,我一般都是建议直接下载二进制包安装,其实真挺方便的,性能上的损失也是微...

    iMike
  • Java开发人员最常犯的10个错误,你犯过几个?

    Arrays.asList()会返回一个ArrayList,但是要特别注意,这个ArrayList是Arrays类的静态内部类,并不是java.util.Arr...

    用户1516716
  • Java实例化对象过程中的内存分配

    在这个类中定义了两个属性和一个方法,当然也是可以定义多和类和多个方法的。 类现在虽然已经定义好了,但是一个类要使用它必须要实例化对象,那么对象的定义格式有一下两...

    beifengtz
  • tf.meshgrid

    在N-D网格上广播用于评估的参数。给定N个一维坐标数组*args,返回一个N- d坐标数组的列表输出,用于计算N- d网格上的表达式。

    于小勇
  • Java中String对象最容易被忽略的知识

    String是一个字符串类型的类,使用""定义的内容都是字符串,但是String在使用上有一点特殊,它有两种定义方式,相信所有java程序员都知道,但是有些细节...

    beifengtz
  • JDK源码阅读(三):ArrayList源码解析

    一般来讲文章开始应该先介绍一下说下简介。这里就不介绍了 如果你不知道 ArrayList 是什么的话就没必要在看了。大致讲一下一些常用的方法

    乱敲代码
  • tf.variables_initializer

    返回初始化变量列表的Op。在会话中启动图形之后,可以运行返回的Op来初始化var_list中的所有变量。这个Op并行运行var_list中所有变量的初始化器。 ...

    于小勇

扫码关注云+社区

领取腾讯云代金券