题目描述
3025这个数具有一种独特的性质:将它平分为二段,即30和25,使之相加后求平方,即(30+25)2,恰好等于3025本身。请求出具有这样性质的全部四位数
输入格式
无
输出格式
满足题意的数全部四位数(从小到大输出,且数之间用空格分开)
样例输入
无
样例输出
2025 3025 9801
代码流程及分析
1. 引入头文件
代码首先引入了stdio.h
和math.h
头文件。stdio.h
用于标准输入输出,math.h
提供了数学函数,如pow
,用于计算幂。
2. 主函数定义
main
函数是程序的入口点,它没有接收任何参数,也没有返回值。
3. 定义变量
在main
函数内部,定义了四个整型变量:a
、b
、m
和n
。
4. 遍历1000到9999之间的数
使用一个for
循环从1000遍历到9999:
int i = 1000;
初始化循环变量i
。- 循环条件
i < 10000;
确保i
在1000到9999之间。
5. 提取千位和百位数字
在循环体内:
m = i / 1000;
通过整除1000提取千位数字。n = i % 1000 / 100;
通过取余1000再除以100提取百位数字。
6. 构造回文数的前半部分
a = m * 10 + n;
构造一个两位数,其中m
是千位数字,n
是百位数字。
7. 构造回文数的后半部分
b = i - a * 100;
计算个位和十位数字,即原数i
减去前两位数a
乘以100。
8. 检查是否为平方数
if (pow((a + b), 2) == i)
使用pow
函数计算(a + b)
的平方,并检查是否等于原数i
。如果是,说明找到了一个回文平方数。
9. 输出结果
如果找到一个回文平方数,则使用printf("%d ", i);
输出这个数。
10. 程序结束
main
函数返回0,表示程序正常结束。
源代码
#include <stdio.h>
#include <math.h>
int main(void)
{
int a, b;
int m, n;
for (int i = 1000; i < 10000; i++)
{
m = i / 1000;
n = i % 1000 / 100;
a = m * 10 + n;
b = i - a * 100;
if (pow((a + b), 2) == i)
{
printf("%d ", i);
}
}
return 0;
}