合工大OJ 1331 回文数

Description

一个正整数,如果从左向右读(称之为正序数)和从右向左读(称之为倒序数)是一样的,这样的数就叫回文数。

任取一个正整数,如果不是回文数,将该数与他的倒序数相加,若其和不是回文数,则重复上述步骤,一直到获得回文数为止。

例如:

68变成154(68+86),再变成605(154+451),最后变成1111(605+506),而1111是回文数。

于是有数学家提出一个猜想:

不论开始是什么正整数,在经过有限次正序数和倒序数相加的步骤后,都会得到一个回文数。至今为止还不知道这个猜想是对还是错。

现在请你编程序验证之。

Input

每行一个正整数。

Output

对应每个输入,输出一行为变换的过程。

Sample Input

27228
37649

Sample Output

27228--->109500--->115401--->219912
37649--->132322--->355553

Hint

1.输入的数据保证小于2^60
2.每组数据保证最多运算100次
友情提示:WA的同学请仔细阅读提示1和提示2

简单题解:看到提示,就直接用字符串处理大数加法,直接AC

 1 #include<iostream>
 2 #include<string>
 3 using namespace std;
 4
 5 bool ishuiwen(string s)
 6 {
 7     for(int i=0;i<s.length()/2;i++)
 8     {
 9         if(s[i]!=s[s.length()-1-i])
10             return 0;
11     }
12     return 1;
13 }
14
15 string Add(string s)
16 {
17     string sum,x;
18     for(int i=0;i<s.length();i++)
19         x[i]=s[s.length()-i-1];
20     int len=s.length();
21     int *a=new int[len+1];
22     a[0]=0;
23     int d=0;
24     for(int i=s.length();i>=1;i--)//从最低位开始计算两个数各位的和,保存到结果数组
25         a[i]=s[i-1]+x[i-1]-‘0‘-‘0‘;//a[1]为计算后结果的最高位,进位情况还未处理
26     for(int i=s.length();i>=0;i--)//处理进位情况
27     {
28         a[i]+=d;//本位加上上一位的进位
29         if(a[i]>=10)//当该位大于等于10时,只保留该位的个位 ,向下一位的进位d为十位
30         {
31             d=a[i]/10;
32             a[i]%=10;
33         }
34         else if(a[i]<10)//当该位小于10是,向高位的进位为0
35             d=0;
36     }
37     if(a[0]>0)
38         for(int i=0;i<s.length()+1;i++)
39             sum+=a[i]+‘0‘;
40     else
41         for(int i=0;i<s.length();i++)
42             sum+=a[i+1]+‘0‘;
43     return sum;
44 }
45
46 int main()
47 {
48     string s;
49     while(cin>>s)
50     {
51         cout<<s;
52         while(!ishuiwen(s))
53         {
54             s=Add(s);
55             cout<<"--->"<<s;
56         }
57         cout<<endl;
58     }
59     return 0;
60 }
时间: 2024-08-08 00:09:37

合工大OJ 1331 回文数的相关文章

OJ刷题之《有序回文数》

题目描述 有序回文数是一种很特殊的数,像43211234,321123,现在我把11称为一阶回文数,2112称为二阶回文数,以此类推. 小平刚开始学递归,想用递归的方法输出一个n(<=9)阶的回文数.你可以帮助他吗? 输入 一个整型变量n,表示第n阶回文数. 输出 第n阶回文数 样例输入 3 样例输出 321123 提示 主函数已给定如下,提交时不需要包含下述主函数 #include<stdio.h> int main() { int n; void digui(int); scanf(

[Swust OJ 797]--Palindromic Squares(回文数水题)

题目链接:http://acm.swust.edu.cn/problem/797/ Time limit(ms): 1000 Memory limit(kb): 10000 Description Palindromes are numbers that read the same forwards as backwards. The number 12321 is a typical palindrome. Given a number base B (2 <= B <= 20 base 1

LeetCode OJ Palindrome Number(回文数)

1 class Solution { 2 public: 3 bool isPalindrome(int x) { 4 int r=0,init=x; 5 if(init==0) return true; 6 if(init<0) return false; 7 while(init!=0){ 8 r=r*10+init%10; 9 init=init/10; 10 } 11 if(r==x) 12 return true; 13 else 14 return false; 15 } 16 };

回文数(swust oj-371)

回文数 Time Limit:   1000MS       Memory Limit:   65535KB Submissions:   70       Accepted:   12 Description 一个自然数如果把所有数字倒过来以后和原来的一样,那么我们称它为回文数.例如151和753357.我们可以把所有回文数从小到大排成一排:1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 22, 33, ...注意10不是回文数,虽然我们可以把它写成010,但是在本题中前导0是不

nyist oj 37 回文字符串 (动态规划经典)

回文字符串 时间限制:3000 ms  |  内存限制:65535 KB 难度:4 描述 所谓回文字符串,就是一个字符串,从左到右读和从右到左读是完全一样的,比如"aba".当然,我们给你的问题不会再简单到判断一个字符串是不是回文字符串.现在要求你,给你一个字符串,可在任意位置添加字符,最少再添加几个字符,可以使这个字符串成为回文字符串. 输入 第一行给出整数N(0<N<100) 接下来的N行,每行一个字符串,每个字符串长度不超过1000. 输出 每行输出所需添加的最少字符

回文数系列题目(经典算法)

回文数 时间限制:1000 ms  |  内存限制:65535 KB 难度:0 描述 请寻找并输出1至1000000之间的数m,它满足m.m^2和m^3均为回文数.回文数大家都知道吧,就是各位数字左右对称的整数,例如121.676.123321等.满足上述条件的数如m=11,m^2=121,m^3=1331皆为回文数. 输入 没有输入 输出 输出1至1000000之间满足要求的全部回文数,每两个数之间用空格隔开,每行输出五个数 解析:这道题直接模拟就好了,算是回文数中最简单的题了,直接写个判断回

3.回文数(Palindrome.cpp)

输入(Palindrome.in): 第一行是一个整数p,代表游戏进行的局数 接下来p行 每行有两个整数 j,h, 分别是小学姐们想出来的数字. 0 < p <=100 0 <= j <= 1000000 0 < = h <= 1000000 输出(Palindrome.out) p 行数据 每一行,先输出序号,接着是所有的回文数,以空隔开,如果不存在 则输出"WTF!!!". 序号后一个冒号和一个空格 样例输入 320 12150 400300 3

判断一个数是否为回文数

#include <stdio.h> int is_palindromic(int num) {  char _old = num;  char _new = 0;  while (num)  {   _new = _new * 10 + (num % 10);   num = num / 10;  }  if (_new == _old)  {   return 1;  }  else  {   return 0;  } } int main() {  int num = 0;  scanf

LeetCode 9 Palindrome Number (回文数)

翻译 确定一个整数是否是回文数.不能使用额外的空间. 一些提示: 负数能不能是回文数呢?(比如,-1) 如果你想将整数转换成字符串,但要注意限制使用额外的空间. 你也可以考虑翻转一个整数. 然而,如果你已经解决了问题"翻转整数(译者注:LeetCode 第七题), 那么你应该知道翻转的整数可能会造成溢出. 你将如何处理这种情况? 这是一个解决该问题更通用的方法. 原文 Determine whether an integer is a palindrome. Do this without ex