第几个回文数的问题输入一个数n,输出第n个回文数(如1,2,3,4,5,6,7,8,9,11,22,101,505……)应该如何实现呢eg输入1224输出33151
来源:学生作业帮助网 编辑:六六作业网 时间:2024/08/26 22:34:38
第几个回文数的问题输入一个数n,输出第n个回文数(如1,2,3,4,5,6,7,8,9,11,22,101,505……)应该如何实现呢eg输入1224输出33151
第几个回文数的问题
输入一个数n,输出第n个回文数(如1,2,3,4,5,6,7,8,9,11,22,101,505……)
应该如何实现呢
eg
输入
12
24
输出
33
151
第几个回文数的问题输入一个数n,输出第n个回文数(如1,2,3,4,5,6,7,8,9,11,22,101,505……)应该如何实现呢eg输入1224输出33151
上面二位的程序的算法负责度是O(n×n),如果输入80000,基本上就死掉了,
我下面的程序的算法负责度给输出结果的长度相关,例如输出 34566543 的复杂度就是O(8),俺的程序即使输入 很大的int也立马就给出结果,例如
输入:4567898
输出:
4567898
the NO.4567898 coprimer num is 3567899987653
#pragma warning(disable:4786)
#include
#include
using namespace std;
const char *num1[] = {"0","1","2","3","4","5","6","7","8","9"};
string getCoprimerNum(int no)
{
int num = 9; //not include 0
int num2 = 10; //include 0
int size = 1;
int times = 0;
while(true)
{
if(no 2)
{
num /= 10;
int data = no/num;
no = no - data*num;
string str3;
if(zero) str3 += num1[data];
else
{
str3 += num1[data+1];
zero = true;
}
str += str3;
str3 += str2;
str2 = str3;
size -= 2;
}
string str3;
if(zero) str3 += num1[no];
else str3 += num1[no+1];
if(size == 1)
{
str += str3;
str += str2;
}
else
{
str += str3;
str += str3;
str += str2;
}
return str;
}
int main()
{
int no;
cin>>no;
while(no > 0)
{
cout