题目描述
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;
}