UVALive2889 Palindrome Numbers(回文数,神级代码....)
2016-03-12 19:47
260 查看
题目链接(Virtual Judge):http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=33603
https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=890
题意:求第n个回文数.回文数从小到大的排列为1,2,3,4,5,6,7,8,9,11,22...
输入n(1<=n<=2*10^9),求第n小的回文数.如,第24小的回文数为151.
原来打算把素数存在数组里,后来发现不行.网上看到了神级代码....
思路:可以算出来第N个回文数字,长度多长而且是该长度第几个回文串。因为1位数有9个,2位数9个,3位数90,4位数90,可以预处理出来。
当我们知道长度的时候,也知道是第几个的时候,直接将第几个-1然后加上一半长度的回文数字。
比如:24 可以求出他的回文长度是3,是第6个。
回文长度为3,他的第一个数101,他的左半部分是10
6-1=5; 用5直接加上他的左半部分就可以了。15
那么将15反着输出,并且他的长度为3.所以只输出1.
则就是151;
思路是别人的,但我的代码和TA的不同.
AC代码:
https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=890
题意:求第n个回文数.回文数从小到大的排列为1,2,3,4,5,6,7,8,9,11,22...
输入n(1<=n<=2*10^9),求第n小的回文数.如,第24小的回文数为151.
原来打算把素数存在数组里,后来发现不行.网上看到了神级代码....
思路:可以算出来第N个回文数字,长度多长而且是该长度第几个回文串。因为1位数有9个,2位数9个,3位数90,4位数90,可以预处理出来。
当我们知道长度的时候,也知道是第几个的时候,直接将第几个-1然后加上一半长度的回文数字。
比如:24 可以求出他的回文长度是3,是第6个。
回文长度为3,他的第一个数101,他的左半部分是10
6-1=5; 用5直接加上他的左半部分就可以了。15
那么将15反着输出,并且他的长度为3.所以只输出1.
则就是151;
思路是别人的,但我的代码和TA的不同.
AC代码:
#include<iostream> using namespace std; int main() { int n; while(cin>>n,n) { long long x = 0; while(n>x*2) x = x*10+9; if(n>x+x/10) { n-=x; cout<<n; while(n>0) { cout<<n%10; n/=10; } } else { n-=x/10; cout<<n; n/=10; while(n>0) { cout<<n%10; n/=10; } } cout<<endl; } return 0; }
相关文章推荐
- 23中java设计模式之单例模式
- Java NIO Tutorial
- 安装github for windows出现问题
- PHP表单验证
- 打印图形c
- 打印图形b
- 在O(1)时间删除链表节点
- python 判断字符串是否包含子字符串
- Qt入门之窗口实现
- 和Eclipse一起走过的日子
- 打印图形a
- C++STL之优先队列
- C++ 购物车代码
- Python RESTful API 学习(一)
- Python RESTful API 学习(一)
- Python RESTful API 学习(一)
- Python RESTful API 学习(一)
- Python RESTful API 学习(一)
- Python RESTful API 学习(一)
- Python RESTful API 学习(一)