蓝桥杯 程序设计_1

        625这个数字很特别,625的平方等于390625,刚好其末3位是625本身。除了625,还有其它的3位数有这个特征吗?

        请编写程序,寻找所有这样的3位数:它的平方的末3位是这个数字本身。输出结果中,从小到大,每个找到的数字占一行。比如那个625就输出为:

625

分析:

        思路1:采用数字平方后在对比后3位程序简单且不容易出错,但效率低;稍作优化,只有当最后1位为0156时条件才有可能成立,由此可排除一些数字。

        思路2:当数字位数增多时,按思路1很快会导致乘法溢出,并且其效率也不高,根据乘法特点(被乘数的每1位分别乘以乘数,并将结果相加即可求出乘积),只需将被乘

数的每1位乘以乘数,并将结果相加即可求出相应位的乘积值,如果该位不等于乘数的该位则说明此数不满足条件,如:54325*54325

5 4 3 2 5

*5 4 3 2 5

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

2 7 1 6 2 5

                             1 0 8 6 5 0

                           1 6 2 9 7 5

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

           6 2 5

由于乘积倒数第36与乘数对应位3不等,说明此数不满足条件。

解:

#include <stdio.h>

void ZiShou(int min, int max)
{
	int i;		//待测试数字
	int n;	//待测试数字副本
	int sum;	//累加和
	int n0;	//依次暂存待测数字每一位

	for(i=min; i<=max; i++)
	{
		n = i;
		sum = 0;
		while(n>0)
		{
			n0 = n%10;
			sum += n0*i;
			if(sum%10 != n0)	//此位不相等?
				break;
			sum = sum/10;
			n = n/10;
		}

		if(n<=0)	//是自守数?
			printf("%d\n", i);
	}
}

int main(int argc, int *argv[])
{
	int min, max;

	printf("请输入数字范围(数字以空格(或回车)间隔)......\n");
	scanf("%d %d", &min,&max);

	ZiShou(min, max);

	return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值