大于非负整数N的第一个回文数 Symmetric Number

1.题目

  如标题,求大于整数N(N>=0)的第一个回文数的字符串表示形式。

2.样例

1  --> 2

9  -->11

12345 -->12421

123456 -->124421

999 -->1001

3.分析

  借用:http://www.cnblogs.com/xudong-bupt/p/4015226.html

4.代码

 1 import java.util.Scanner;
 2
 3
 4 public class SymmetricNumber {
 5
 6
 7     public static void main(String[] argv){
 8
 9         Scanner in=new Scanner(System.in);
10         int N=in.nextInt();
11         String n=String.valueOf(N);
12
13         //特殊情况:9999999999999.........
14         if((N+1)%10==0)
15             System.out.print(N+2);
16
17         //非特殊情况
18         else
19         {
20
21             if(n.length()==1){
22                 System.out.println(N+1);
23             }
24             else{
25
26                 //偶数位
27                 if(n.length()%2==0){
28                 String temp=n.substring(0,n.length()/2);
29                 String temp_0=n.substring(n.length()/2,n.length());
30                 String temp_1="";
31                 for(int i=n.length()/2-1;i>=0;i--){
32                     temp_1=temp_1+temp.charAt(i);
33                 }
34
35                 //大于的话则直接输出前半部分和前半部分的倒置
36                 if(Integer.parseInt(temp_1)>Integer.parseInt(temp_0))
37                     System.out.println(temp+temp_1);
38
39                 //否则前半部分加一,然后新的temp与temp的倒置组成新的String 输出
40                 else
41                 {
42                     temp=String.valueOf(Integer.parseInt(temp)+1); //加一
43                     //本身加倒置组成新的String
44                     for(int i=temp.length()-1;i>=0;i--){
45                         temp=temp+temp.charAt(i);
46                     }
47                     System.out.println(temp);
48                 }
49
50                 }
51
52                 //奇数位
53                 else{
54                     String temp_0=n.substring((n.length()+1)/2,n.length());
55                     String temp=n.substring(0,(n.length()+1)/2);
56                     String temp_1="";
57                     for(int i=temp.length()-2;i>=0;i--){
58                         temp_1=temp_1+temp.charAt(i);
59                     }
60                     if(Integer.parseInt(temp_1)>Integer.parseInt(temp_0))
61                         System.out.println(temp+temp_1);
62                     else
63                     {
64                         temp=String.valueOf(Integer.parseInt(temp)+1);
65                         for(int i=temp.length()-2;i>=0;i--){
66                             temp=temp+temp.charAt(i);
67                         }
68                         System.out.println(temp);
69                     }
70                 }
71
72             }
73
74         }
75
76     }
77 }
时间: 2024-10-08 20:23:01

大于非负整数N的第一个回文数 Symmetric Number的相关文章

[亚马逊amazon] 在线笔试题 大于非负整数N的第一个回文数 Symmetric Number

1.题目 如标题,求大于整数N(N>=0)的第一个回文数的字符串表示形式. 这个题目也是当时笔试第一次见到,花了一个小时才做出了.慢慢总结还是挺简单的. 2.分析 分析如下: (1)一位数N(9除外). 第一个大于N回文数等于N+1,如大于3的第一个回文数是4. (2)奇数位(一位数除外) 需要看“左边反转数字”是否大于"右边数字". 1)如果小于等于,则“左边+中间字母”组成的数字+1,再对称就可以. 2)如果大于,则左边数字直接对称到右边就可以啦. (3)偶数位 需要看“左边

9. 回文数 Palindrome Number

Determine whether an integer is a palindrome. Do this without extra space. 题意:判断一个数字是否为回文数 如何取得一个Integer的最高位?假设x = 688答:x / mask. 设置一个和x位数一样的mask,mask = 100,然后用x/mask,表示x里面有几个mask,即是最高位数字. 688里有6个100,即为6. 如何删去一个Integer的最高位?假设x = 688答:x = x % mask. 还是

计算大于正整数1600000的最小双基回文数

def judge(n): count=0 for i in xrange(2,10+1): x='' tmp=n while tmp!=0: x+=str(tmp%i) tmp/=i if x==x[::-1]: count+=1 if count==2: return True return False def foo(): n=1600000 while True: n+=1 if judge(n): print n break pass if __name__ == '__main__'

要求循环输入一个数,判断是否为回文数

import java.util.Scanner; public class HuiWenShu { public static void main(String[] args) { Scanner input = new Scanner(System.in); char c = 'y'; //初始化c为y,为下面的循环做好准备 while(c == 'y'){ while(c == 'y'){ System.out.println("请随意输入一个大于三位的奇位数"); //回文数属

C语言找出大于一个数的最小回文数的代码

下面代码内容是关于C语言找出大于一个数的最小回文数的代码,希望能对码农们有用途. #include <stdio.h>#include <stdlib.h>#include <string.h> void main(){char data[10] = {0}, res[10] = {0}, state[10] = {0}, len = 0, pos, bit = 0;scanf("%s",data); len = strlen(data); pos

第二届战神杯线上编程挑战赛月赛第一题:回文数

题目详情: Njzy学习了回文串后联想到了回文数,他希望统计出一个区间内的全部回文数.如今给定一个闭区间[a,b],求这个区间里有多少个回文数. 比方[20,30],仅仅有一个回文数那就是22. 输入描写叙述: 输入包括多组測试数据,每组測试数据包括两个整数a,b, (0<a<=b<10^6). 输出描写叙述: 对于每组測试数据输出对应的答案. 答题说明: 输入例子: 1 10 20 30 300 400 输出例子: 9 1 10 解题思路: total[i]代表从1到i之间有多少回文数

回文数问题

问题描述 我在2008年6月写了一篇随笔"可以使用C#语言的在线ACM题库",其中提到 Sphere Onlile Judge (SPOJ) 网站.现在我们来看看该网站 SPOJ Problem Set (classical) 中的"5. The Next Palindrome".这道题目的主要内容如下所示: The Next Palindrome: A positive integer is called a palindrome if its represent

LeetCode——9 Java之回文数

题目: 判断一个整数是否是回文数.回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数. 示例 1: 输入: 121 输出: true 示例 2: 输入: -121 输出: false 解释: 从左向右读, 为 -121 . 从右向左读, 为 121- .因此它不是一个回文数. 示例 3: 输入: 10 输出: false 解释: 从右向左读, 为 01 .因此它不是一个回文数.思路:看到这个回文数,立马让我想到了上一道题的整数反转.我先考虑的是把整数转换为字符串,看逆序后的字符串是否和

C# 算法题系列(二) 各位相加、整数反转、回文数、罗马数字转整数

各位相加 给定一个非负整数 num,反复将各个位上的数字相加,直到结果为一位数. 示例: 输入: 38 输出: 2 解释: 各位相加的过程为:3 + 8 = 11, 1 + 1 = 2. 由于 2 是一位数,所以返回 2. 进阶:你可以不使用循环或者递归,且在 O(1) 时间复杂度内解决这个问题吗? 题目地址 https://leetcode-cn.com/problems/add-digits/ 代码模板 public class Solution { public int AddDigits