首页 > 其他 > 详细

题解 LA2889

时间:2019-12-01 01:27:26      阅读:62      评论:0      收藏:0      [点我收藏+]

题目大意 多组数据,每组数据给出一个正整数 \(n\),输出第 \(n\) 大的回文数(即 \(1,2,3,\cdots\))。

分析 不难发现,\(n\) 位的回文数有 \(9*10^{\lfloor \frac{n}{2} \rfloor}\),则按此规律分类查找即可。

#include<bits/stdc++.h>
using namespace std;

typedef long long ll;

ll n;
int len, a[15];
bool flag = 1;

int main()
{
    while(~scanf("%lld", &n) && n) {
        flag = 1, len = 0;
        
        ll base = 9;
        while(n > base) {
            n -= base, flag ^= 1;
            if(flag) base *= 10ll;
        }
        
        base /= 9, n += base - 1;
        while(n) {
            a[++len] = n % 10;
            n /= 10;
        }
        
        for(int i = len; i >= 1; --i)
            printf("%d", a[i]);
        for(int i = flag + 1; i <= len; ++i)
            printf("%d", a[i]);
        putchar('\n');
    }
}

题解 LA2889

原文:https://www.cnblogs.com/whx1003/p/11964688.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!