C++题目,请求大侠解答

来源:百度知道 编辑:UC知道 时间:2024/05/11 13:00:39
10、 若一个数(首位不为0)从左向右读与从右向左读都一样,就将其称为回文数。例如,给定一个十进制数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,将得到回文数的步骤逐步打印出来
最好有2种答案,谢谢

#include<iostream>
using namespace std;

int reverse(char []);
bool judge(char []);
int main()
{
char c[10];
int n=0,i=1;
cout<<"输入一个十进制数:";
cin>>c;
n=atoi(c);
do
{

cout<<"STEP"<<i++<<':'<<n<<'+';

int x=reverse(c);
n+=x;

cout<<x<<'='<<n<<endl;

itoa(n,c,10);
if(judge(c))
break;

}while(1);
return 0;
}

bool judge(char c[10])
{
int length=strlen(c);
for(int i=0;i<=length/2;i++)
if(c[i]!=c[length-i-1]) return false;
return true;
}

int reverse(char c[10])
{
int x,length=strlen(c);
for(int i=0;i<length/2;i++)
{
char temp=c[i];
c[i]=c[length-i-1];
c[length-i-1]=temp;
}
x=atoi(c);