zoukankan      html  css  js  c++  java
  • [swustoj 371] 回文数

    回文数(0371)

    问题描述

    一个自然数如果把所有数字倒过来以后和原来的一样,那么我们称它为回文数。例如151和753357。我们可以把所有回文数从小到大排成一排:1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 22, 33, ...注意10不是回文数,虽然我们可以把它写成010,但是在本题中前导0是不允许的。 
    你的任务是求出第i小的回文数。例如第1,12,24大的回文数分别是1,33,151。

    输入

    输入只有一行,即i(1<=i<=2*10^9)。
    输出

    输出只有一行,即第i小的回文数。

    样例输入

    24

    样例输出

    151

    构造回文数、水题

    #include <iostream>
    #include <cstdio>
    #include <algorithm>
    #include <cstring>
    using namespace std;
    #define ll long long
    #define N 100010
     
    ll n;
    ll a[]={0,9,9,90,90,900,900,9000,9000,90000,90000,900000,900000,9000000,9000000,90000000,90000000,900000000,900000000,9000000000};
    ll b[100],len;
    int main()
    {
        ll k,t,i,bk;
        while(scanf("%lld",&n)!=EOF)
        {
            len=0;
            k=1;
            while(n-a[k]>0) n-=a[k++];
            bk=(k+1)>>1;
            t=1;
            for(i=2;i<=bk;i++) t*=10;
            t+=n-1;
            while(t)
            {
                b[++len]=t%10;
                t/=10;
            }
            for(i=len;i>=1;i--) cout<<b[i];
            for(i=k&1?2:1;i<=len;i++) cout<<b[i];
            cout<<endl;
        }
        return 0;
    }
    趁着还有梦想、将AC进行到底~~~by 452181625
  • 相关阅读:
    1309:【例1.6】回文数(Noip1999)
    1168:大整数加法
    1308:【例1.5】高精除
    邻接表存图
    [NOIP2010]关押罪犯(并查集)
    [NOI2001]食物链(并查集)
    最小生成树-Prim算法和Kruskal算法[转]
    [BOI2003]团伙(并查集)
    超有爱的并查集[转]
    [ZJOI2006]三色二叉树 (树形dp)
  • 原文地址:https://www.cnblogs.com/hate13/p/4489417.html
Copyright © 2011-2022 走看看