【题目描述】
若一个数(首位不为零)从左向右读与从右向左读都是一样,我们就将其称之为回文数。
例如:给定一个整数56,将56加65(即把56从右向左读),得到121是一个回文数。
又如,对于整数87,
STEP1:87+78=165
STEP2:165+561=726
STEP3:726+627=1353
STEP4:1353+3531=4884
在这里的一步是指进行了一次加法运算,上例最少用了4步得到回文数4884。
写一个程序,给定整数M。求最少经过几步可以得到回文数。如果在30步以内(包含30步)不可能得到回文数,则输出“Impossible”。
【输入格式】
一个整数M(M小于100位)。
【输出格式】
输出得到回文数的步骤。
最后一行输出步骤数,若30步内(包含30步)不能得到回文数,则输出“Impossible”。
【输入数据1】
87
【输出数据1】
87+78=165
165+561=726
726+627=1353
1353+3531=4884
4
【输入数据2】
1855413681
【输出数据2】
1855413681+1863145581=3718559262
3718559262+2629558173=6348117435
6348117435+5347118436=11695235871
11695235871+17853259611=29548495482
29548495482+28459484592=58007980074
58007980074+47008970085=105016950159
105016950159+951059610501=1056076560660
1056076560660+0660656706501=1716733267161
1716733267161+1617623376171=3334356643332
3334356643332+2333466534333=5667823177665
5667823177665+5667713287665=11335536465330
11335536465330+03356463553311=14692000018641
14692000018641+14681000029641=29373000048282
29373000048282+28284000037392=57657000085674
57657000085674+47658000075675=105315000161349
105315000161349+943161000513501=1048476000674850
1048476000674850+0584760006748401=1633236007423251
1633236007423251+1523247006323361=3156483013746612
3156483013746612+2166473103846513=5322956117593125
5322956117593125+5213957116592235=10536913234185360
10536913234185360+06358143231963501=16895056466148861
16895056466148861+16884166465059861=33779222931208722
33779222931208722+22780213922297733=56559436853506455
56559436853506455+55460535863495565=112019972717002020
112019972717002020+020200717279910211=132220689996912231
132220689996912231+132219699986022231=264440389982934462
264440389982934462+264439289983044462=528879679965978924
528879679965978924+429879569976978825=958759249942957749
958759249942957749+947759249942957859=1906518499885915608
1906518499885915608+8065195889948156091=9971714389834071699
Impossible
我的代码(没输出):
#include <bits/stdc++.h>
using namespace std;
int a[201],n,ans;
string s;
bool check()
{
for(int i=1; i<=n/2; i++)
if(a[i]!=a[n-i+1])
return false;
return true;
}
void jia()
{
int b[201],c[201],m,jw=0;
memset(b,0,sizeof(a));
memset(c,0,sizeof(a));
for(int i=1; i<=n; i++)
b[i]=a[n-i+1];
for(int i=1; i<=n; i++)
{
m=a[i]+b[i]+jw;
c[i]=m%10;
jw=m/10;
}
if(jw==1)
{
n+=1;
c[n]=1;
}
for(int i=1;i<=n;i++)
a[i]=c[i];
}
int main()
{
cin>>s;
n=s.size();
for(int i=1; i<=n; i++)
a[i]=int(s[n-i]-48);
while(ans<=30)
{
if(check())
{
cout<<ans;
return 0;
}
jia();
ans++;
}
cout<<"Impossible";
}