UVALive 2889 (数学)
2016-06-07 22:26
393 查看
题意:求第n大的回文数字.
截取对称中心前面的那一段数字,从大到小依次就是1,2,3......11,12,13......,100,101
而以某个数字为对称中心前一段的数字共有两种,比如13就有131和1331.
所以判断一下是哪一种就好了.
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <iostream>
#include <map>
#include <set>
#include <vector>
#include <queue>
using namespace std;
long long n;
void solve () {
long long cur = 1, cnt = n;
while (cnt > 2*(cur*10-cur)) cnt -= 2*(cur*10-cur), cur *= 10;
bool flag = (cnt <= cur*10-cur);
if (!flag) cnt -= (cur*10-cur);
cur = cur+cnt-1;
cout << cur;
if (flag) cur /= 10;
while (cur) {
cout << cur%10;
cur /= 10;
}
cout << "\n";
}
int main () {
while (cin >> n && n) {
solve ();
}
return 0;
}
截取对称中心前面的那一段数字,从大到小依次就是1,2,3......11,12,13......,100,101
而以某个数字为对称中心前一段的数字共有两种,比如13就有131和1331.
所以判断一下是哪一种就好了.
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <iostream>
#include <map>
#include <set>
#include <vector>
#include <queue>
using namespace std;
long long n;
void solve () {
long long cur = 1, cnt = n;
while (cnt > 2*(cur*10-cur)) cnt -= 2*(cur*10-cur), cur *= 10;
bool flag = (cnt <= cur*10-cur);
if (!flag) cnt -= (cur*10-cur);
cur = cur+cnt-1;
cout << cur;
if (flag) cur /= 10;
while (cur) {
cout << cur%10;
cur /= 10;
}
cout << "\n";
}
int main () {
while (cin >> n && n) {
solve ();
}
return 0;
}
相关文章推荐
- java应用cpu过高
- javaweb学习总结(四十四)——监听器(Listener)学习
- 94. Binary Tree Inorder Traversal
- Android Studio推荐插件
- 打印frame
- java 8之Lambda Expressions 解说
- war 宽度变窄
- Android获取手机联系人的姓名和电话
- 第二期冲刺站立会议个人博客14(2016/6/07)
- Mac 10.10.4下配置apache
- 去掉超链接的下划线
- Object-Oriented Analysis and Design Using UML 翻译与学习 (序)
- NSJSONSerialization的简单用法
- Android 图片处理之-->android.graphics.Camera实现图像的旋转、缩放
- java 数组实现哈希表的构建,查找,插入,删除
- 中文javadoc
- Object-Oriented Analysis and Design Using UML 翻译与学习 (目录)
- javascript-第六节-动态添加表格(三种方法)
- 中文javadoc
- how to install runC on ubuntu14.04