今天看到的一道题,求解

leaderpig 2011-05-28 02:43:45
给定一个正整数,把它的每一个位上的数字倒过来排列组成一个新数,然后与原数相加,如果是回文数则停止,如果不是,则重复这个操作,直到和为回文数为止。给定的数本身不为回文数

我只能做到将倒转数跟原数相加,之后的判断加数是否回文就不知道怎么处理了,求解

...全文
197 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
leaderpig 2011-05-28
  • 打赏
  • 举报
回复
这是我做的:
#include <iostream>
#include <stdlib.h>
using namespace std;

int change(int a) //倒转
{
int i=0;
while(a)
{
i*=10;
i+=a%10;
a/=10;
}
return i;
}

void main()
{
int num1,num2;
int sum1,sum2;
cout<<"请输入一个正整数:"<<endl;
do //判断是否回文
{
cin>>num1;
num2=change(num1);
if(num1==num2)
{
cout<<"你输入的是回文数,请重新输入:"<<endl;
}
}while(num1==num2);
do
{
static int i=1;
if(num1==num2)
{
break;
}
cout<<"STEP"<<i<<": "<<num1<<" + "<<num2<<" = "<<num1+num2<<endl;
num1=num1+num2;
num2=change(num1);
i++;
if(i>8)
{
cout<<" *****已超8步...*****"<<endl;
break;
}
}while(1);

}
pandm 2011-05-28
  • 打赏
  • 举报
回复
给个美观一点的版本




#include <algorithm>
#include <cstdio>
using namespace std;

//reverse实现把n倒过来
int reverse(int n) {
int res = 0;
while(n > 0) {
res = res * 10 + (n % 10);
n /= 10;
}
return res;
}


//判断一个数是不是回文
bool isPal(int n) {
return n == reverse(n);
}


int main() {
printf("请输入一个正整数\n");
int n;
scanf("%d", &n);
int re_n;

while(1) {
re_n = reverse(n);
printf("==================\n%d -> %d\n%d + %d = %d\n",
n , re_n, n, re_n, n + re_n);
n = re_n + n;
if (isPal(n))
break;
}

printf("%d\n", n);
return 0;
}




pandm 2011-05-28
  • 打赏
  • 举报
回复
你已经知道怎么把一个数倒过来了,对吧?
那你要判断一个数x是不是回文数,你只要把那个数倒过来,得到x~,然后看看x是否等于x~,就知道x是不是回文数了




#include <algorithm>
#include <cstdio>
using namespace std;

//reverse实现把n倒过来
int reverse(int n) {
int res = 0;
while(n > 0) {
res = res * 10 + (n % 10);
n /= 10;
}
return res;
}


//判断一个数是不是回文
bool isPal(int n) {
return n == reverse(n);
}


int main() {
printf("请输入一个正整数\n");
int n;
scanf("%d", &n);
int re_n;

while(1) {
re_n = reverse(n);
n = re_n + n;
if (isPal(n))
break;
}

printf("%d\n", n);
return 0;
}




downmooner 2011-05-28
  • 打赏
  • 举报
回复
回文数就是按中间对称的数字,比如32123

可以转成字符串来比较。首尾字符是否相等。
你也可以这样 32123 / 1000 == 32123 % 10
stackoverlow 2011-05-28
  • 打赏
  • 举报
回复
itoa(number,str,b);//先把数转换成字符串,b表示你要转换的数是多少进制
strrev(str);//函数将字符串颠倒
然后你把原来字符串的和颠倒的比较下,一样的就是回文了
或者自己写个颠倒数组的函数也行

65,210

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧