C语言趣味问题系列【2】自守数

1. 问题描述

什么是自守数
如果一个数字的平方的尾数刚好等于该数本身,那么这个数就是自守数。
例如:
5 * 5 = 2525 * 25 = 62576 * 76 = 5776

本文要求出0~1000以内的自守数。

2. 问题分析

首先分析平方后结果的构成,以376为例:
376 * 376 = 141376
① 376 * 6 = 2256
② 376 * 70 = 26320
③ 376 * 300 = 112800
141376 = ① + ② + ③

虽然数字很大,但是对自守数的判读有用的其实只有①②③中数字的最后三位之和的最后三位:256 + 320 + 800 = 1376

因此判定一个数num是否为自守数的步骤如下:
1)计算数字num是几位数字,把位数存储在n里;
2)被乘数num依次乘上num的各个位上的数字,求出前文中的①②③。
3)提取①②③的最后n位数值,并依次相加,得到res;
4)提取res的最后n位数值,与num相比,如果二者相等,那么num就是自守数。

3. 代码

#include <stdio.h>
int zishou(int num);   //判断自守数的子程序,返回长度为n的数的平方值的最后n位
int len(i
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值