zoukankan      html  css  js  c++  java
  • 回文数 第N个回文数

    判断回文数还是不难,如果能转为字符串就更简单了。

    如果是求第N个回文数呢。

    12321是一个回文数,这里先考虑一半的情况。

    回文数的个数其实是有规律的。如:

        1位回文数: 9个

        2位回文数: 9个

        3位回文数: 90个

        4位回文数: 90个

        5位回文数: 900个

        6位回文数: 900个

        …

        我们看到9、90、900,是不是很有规律,那是什么原因?很简单,我们把回文数拆开两半

    [123321]来看。两半的变化一样的,那我们只算其中一半就行了。首位不能是0,所以左半最小为

    100,最大为999,共有999-100=900个,如此类推。

        所以我们可以基于以下原则:

        1、 回文数的数位每增长2,回文数的个数为原来的10倍。如从个位回文数到百位回文数,个数

    从9个变为90个。

        2、 个位回文数的个数是9,1、2、3、…、9。

    static long find(int index) {
            int count = 0;            
            int number = 9;                        //记录数位上的回文数,如个位回文数为9
            int w = 0;                            //记录数位
            
            long half;                            //保存回文数的左半边的结果
            long h = 1;                            //回文数的左半边的起始基数
            long res;                            //结果
            
            while(true) {
                if(w > 0 && w%2 == 0) {            //每进两个数位,回文数乘以10
                    number *= 10;
                }
                w++;                            //数位加一
                if(count + number > index)        //回文数大于查找的回数,跳出
                    break;
                    
                count += number;                //回文数加上当前数位上的回文数
            }
            
            index -= count;                        //在当前数位上的位置。如w=5,index=50,则万位上的第50个回文数是我们所求
            
            for(int i = 0; i < (w-1) / 2; i++) {    //求回文数的左半边的基数,如回文数在万位上,则为100
                h *= 10;
            }
            
            half = h + index;                        //回文数的左半边,如100 + 50 = 150
            
            res = half;
            
            if(w%2 != 0)                            //如果为奇数,则中间那个数不必算入右半边了!
                half /=10;
                
            while(half != 0) {                        //拼接回文数
                res = res *10 + half % 10;
                half /= 10;
            }
            
            return res;
        }
    

      

  • 相关阅读:
    100%解决XP系统asp http500内部错误[转自XX博客]
    .net使用DotNetCharting控件生成报表统计图总结 (转地址)
    关于request取中文字符串变?的解决办法
    Delete删除大批量数据无响应的解决办法
    点击GridView模版列里的按钮取GridView当前被操作行的数据(转载)
    繁體字顯示問題
    寫博客過程中遇到的問題
    box model相關的API
    Buddhism常用術語
    靡不有初鮮克有終
  • 原文地址:https://www.cnblogs.com/juandx/p/4070175.html
Copyright © 2011-2022 走看看