当前位置:编程学习 > C#/ASP.NET >>

最小的回文数

Description:
给出一个数X,求比X大的最小的回文数!(x<10^20) 

Sample Input:
1
10
12
Sample Output:
2
11
22

给个好思路....O(∩_∩)O谢谢 --------------------编程问答-------------------- 自己去看看,这种题目都是以前在学校的时候做的,最好自己去实现。 --------------------编程问答-------------------- 谢谢O(∩_∩)O谢谢
引用 1 楼 libinguest 的回复:
自己去看看,这种题目都是以前在学校的时候做的,最好自己去实现。
--------------------编程问答-------------------- 1.用while循环,碰到回文数就停止;
2.写一个判断一个数是否是回文数的方法。
综上,问题的关键是写一个方法判断一个数是否是回文数。
(不考虑效率问题的话,应该是很简单的) --------------------编程问答-------------------- 正好没事做,写了个判断回文数的方法,我是通过转换成string来完成的。
挺简单的一个方法,如果哪位朋友有更好的方法,希望能介绍一下:

  static bool IsPalindrome(int no) 
        {
            bool flg = false;
            if (no > 0)
            {
                string noStr = no.ToString();                                
                int palindromeOfno = 0;
                for (int i = 0; i <noStr.Length; i++)
                {                    
                    palindromeOfno+= (Convert.ToInt32(noStr[i].ToString()) *
                        Convert.ToInt32(Math.Pow(10, i)));
                }                
                if (no == palindromeOfno) 
                {
                    flg = true;
                }
            }
            else 
            {
                flg = false;
            }
            return flg;
        }
--------------------编程问答-------------------- 把一个数从中间分开
比如105456 分成105 456 
比如105678 分成105 678
比较中线左右第一个数谁大,如果右边的数大,左边的数加1
105 456 中 5比4大 所以左边105不变
105 678 中 6比5大 所有左边105 + 1得到 106

105对应回文数 105501
106对应会文数 106601

这个是位数为偶数的情况,位数为基数的情况差不多。
12345  拆分成 123 45  由于中线左右3 比4小 
左边+1得到124
所以回文数12421 --------------------编程问答--------------------
public static void GetHWS(int num)
    {
        string strNum = Convert.ToString(num);
        int length = strNum.Length;
        bool isOdd = (length % 2 == 1);

        string strLeftHalf;
        if (length == 1)
        {
            strLeftHalf = strNum;
        }
        else
        {
            strLeftHalf = strNum.Substring(0, length + 1 >> 1);
            char cLeft = strNum[(strNum.Length + 1 >> 1) - 1];
            char cRight = strNum[strNum.Length + 1 >> 1];
            if (cRight > cLeft)
            {
                int iLeftHalf = Convert.ToInt32(strLeftHalf);
                strLeftHalf = Convert.ToString(iLeftHalf + 1);
            }
        }
        string strRightHalf = new string(strLeftHalf.ToCharArray().Reverse().ToArray());
        if (isOdd)
        {
            strRightHalf = strRightHalf.Substring(1);
        }
        Console.WriteLine(strLeftHalf + strRightHalf);
    }
--------------------编程问答-------------------- 有点问题。奇数比较大小有问题。也没考虑比较相等的情况。不过思路大致是这样 --------------------编程问答-------------------- --------------------编程问答--------------------
引用 1 楼 libinguest 的回复:
自己去看看,这种题目都是以前在学校的时候做的,最好自己去实现。

竟然引用我空间的,惭愧啊
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,