
http://oj.ecustacm.cn/problem.php?id=1280
#include<cstdio>
#include<iostream>
#include<string>
#include<sstream>
using namespace std;
int a[1000];
string s;
bool judge(long long int sum)//判断是不是回文数
{
stringstream s1;
s1<<sum;
s1>>s;
for(int i=0;i<s.size();i++)
{
if(s[i]!=s[s.size()-1-i])
{
return false;
}
}
return true;
}
int main(void)
{
int i;
for(i=10;i<=200;i++)
{
long long int temp=i;
long long int m=i;//保存原数
bool flag=true;
int number=0;
while(flag==true)
{
int j=0;
while(temp)//求其相反数
{
a[j++]=temp%10;
temp/=10;
}
long long int sum=0;
for(int i=0;i<j;i++)
{
sum=sum*10+a[i];
}
sum=sum+m;//两数的和
if(judge(sum))
{
flag=false;
break;
}
temp=sum;
m=sum;
number++;//运算的次数
if(number>36)//运算次数超过30 说明找到了
{
printf("%d\n",i);
return 0;
}
}
}
return 0;
}
#include<iostream>
#include<cstdio>
#include<string>
#include<algorithm>
#include<cstring>
using namespace std;
bool judge(string s)
{
int temp=s.size();
for(int i=0;i<temp/2;i++)
{
if(s[i]!=s[temp-1-i]) return false;
}
return true;
}
int main(void)
{
for(int i=10;i<=200;i++)
{
bool flag=false;
long long int ans=0;
long long int a=i;
long long int b=0;
long long int sum=0;
while(1)
{
string s1=to_string(a);
reverse(s1.begin(),s1.end());//第二个数
b=stoll(s1);//注意是 stoll 不是stoi 不然会爆
sum=a+b;//和
string ss=to_string(sum);
if(judge(ss)) flag=true;
if(flag) break;
a=sum;
ans++;
if(ans>30)
{
cout<<i<<endl;
return 0;
}
}
}
return 0;
}
这两段代码都是解决同一问题的C++实现,即寻找10到200之间的整数i,使得i与其相反数的和是回文数。通过不断累加和并检查回文性质,直到找到符合条件的数或者超过预设的运算次数限制。

被折叠的 条评论
为什么被折叠?



