核心三步搞定“反序数”类题目——以清华大学考研复试上机题为例(附超详细解析过程)

本文介绍了如何用C++编程解决一个题目,即找出不超过256的所有对称平方数。作者通过反序数的转换方法,利用三步骤(取、加、缩)实现代码,展示了如何在main函数中遍历并检查整数的平方是否满足对称性。
摘要由CSDN通过智能技术生成

一、题目原文

KY267 对称平方数1

描述

打印所有不超过256,其平方具有对称性质的数。如2,11就是这样的数,因为2*2=4,11*11=121。

输入描述:

无任何输入数据

输出描述:

输出具有题目要求的性质的数。如果输出数据不止一组,各组数据之间以回车隔开。

二、题目分析

作者将反序数的转换写成函数,核心的三步代码如下所示。

Step1:“取”,即将原操作数对10取余,得到原操作数的个位数(例:1234%10=4,123%10=3)

Step2:“加”,将Step1得到的个位数加上上一位个位数的十倍(例:第一趟循环个位数为1234%10=4,第二趟循环的个位数为123%10=3,因为反序数后,“4”是高位,“3”是低位,所以要将4*10+3=43)

Step3:“缩”,将原操作数不断除以10,目的是让原操作数的每个数字都能被提取出来(例:1234/10=123,让“3”能被Step1提取出来)

三、代码书写

#include <cstdio>
#include <iostream>

int reverse(int x){
	int temp;
	int acc=0;
	while(x>0){
		temp=x%10;
		acc=acc*10+temp;
		x=x/10;
	}
	return acc;
}

int main(){
	for(int i=0;i<=256;i++){ //题目要求输入不小于256的数,此处使用枚举
		if(i*i==reverse(i*i)){
			printf("%d\n",i);
		}
	}
	return 0;
}

四、OJ测试

  • 11
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值