问题描述
对于正整数 n, 如果存在正整数 k 使得 n=1+2+3+⋯+k=k(k+1)2n=1+2+3+⋯+k=k(k+1)/2, 则 n 称为三角数。例如, 66066 是一个三角数, 因为 66066=1+2+3+⋯+36366066=1+2+3+⋯+363 。 如果一个整数从左到右读出所有数位上的数字, 与从右到左读出所有数位 上的数字是一样的, 则称这个数为回文数。例如, 66066 是一个回文数, 8778 也是一个回文数。 如果一个整数 nn 既是三角数又是回文数, 我们称它为三角回文数。例如 66066 是三角回文数。 请问, 第一个大于 20220514 的三角回文数是多少?
答案提交
这是一道结果填空的题, 你只需要算出结果后提交即可。本题的结果为一 个整数, 在提交答案时只填写这个整数, 填写多余的内容将无法得分。
运行限制
- 最大运行时间:1s
- 最大运行内存: 256M
解法代码
#include <stdio.h> // 包含标准输入输出库
#include <stdlib.h> // 代码中未使用
int main()
{
int x = 0; // 初始化累加和x为0
// 使用for循环进行无限迭代,i从1开始,每次循环i增加1
for (int i = 1;; i++)
{
x += i; // 将当前的i值累加到x上
// 检查累加和x是否大于20220514
if (x > 20220514)
{
int a = x; // 复制x的值到a,以便在不修改x的情况下进行反转操作
int b = 0; // 初始化b为0,用于存储a(即x)的反转数字
// 使用while循环反转a的数字,并累加到b上
while (a != 0)
{
b = b * 10 + a % 10; // 将a的最后一位数字加到b上,并移动b的小数点一位
a = a / 10; // 移除a的最后一位数字
}
// 检查反转后的数字b是否与原始数字x相等(即检查x是否为回文数)
if (b == x)
{
printf("%d\n", x); // 如果x是回文数,则打印x
break; // 并跳出循环(因为已经找到了第一个符合条件的回文数)
}
}
}
return 0; // 程序正常结束
}
运行结果