一、题目原文
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;
}