题目
![](https://img-blog.csdnimg.cn/img_convert/b482c37ce1b03eee2ad52841dc081cd9.png)
![](https://img-blog.csdnimg.cn/img_convert/9be2eb0ffed677837a791133eacaba39.png)
答案实例:
35133153 |
题解:
首先:题目要求:1.三角数;2.回文数;
要想解决这个问题:首先就是要先解决哪个问题?假如要先解决回文数:容易造成时间超限;循环次数会很长;看到三角数的概念就是存在某一个k能够满足1+2+3+...+k=某一个数sum(假设定义sum);想到这里,先解决三角数会大大简化代码内存,效率更高,循环次数较少;
然后就开始判断三角数:
![](https://img-blog.csdnimg.cn/img_convert/b439879ad26f2b1a0a84a6414587025f.png)
根据这个实例可以(int i=1;;i++) 当满足sum>20220514时,判断sum是否满足回文数;这里不用再判断是否符合三角数,因为sum就是由1+2+...+k得来的,只要满足sum>20220514即可;
接着判断回文数:
回文数可以通过数组判断,即前一位和后一位相等即可;或者可以通过倒序值与正序值相等;这两种都可以;本次使用后一种方法:即先使用一个while语句计算位数;然后再使用一个while循环计算倒序输出的数sum1,最后判断sum=?sum1;如果相等,则满足题目要求,输出即可;
#include<stdio.h>
#include<math.h>
int main()
{
int i,k,x,sum=0;
int flag=0,sum1;
int count; //判断三角数;
for(i=1;;i++)
{
sum+=i; //记录三角数;
if(sum>20220514)
{
count=0;//每符合条件就重置count;
x=sum; //便于下文判断回文数;
sum1=0;
while(x>0)
{
count++;
x=x/10;
}
x=sum; //重置x的值;便于下面的取位运算;
while(count>0)
{
sum1+=(x%10)*pow(10,count-1);//记录倒过来的数;
x=x/10;
count--;
}
if(sum1==sum)
{
printf("%d",sum1);
return 0; //取到就结束即可;
}
}
}
}
好了,本题就解到这里了,谢谢大家的支持,一起努力!!!