洛谷U3348 A2 回文數

2022-04-02 00:52:13 字數 1416 閱讀 5542

方方方很喜歡回文數,於是就有了一道關於回文數的題目。

求從小到大第n(1<=n<=10^18)個回文數。

注釋:出題人認為回文數不包括0。

輸入格式:

一行乙個正整數n。

輸出格式:

第n個回文數。

輸入樣例#1:

2333

輸出樣例#1:

1334331

輸入樣例#2:

12345678987654321

輸出樣例#2:

23456789876543222234567898765432

對於50%的資料,n<=3000。

對於100%的資料,1<=n<=10^18。..

/*

找規律題

我們發現乙個輸出對應著輸入資料首位-1,末位-1,然後進行對稱變換

細節有三個:

1.如果前兩項為10,需要把1減去,0變成9

2.如果末項為9,加1之後向前進製

3.對稱變換需要考慮對稱軸是最後一位數還是最後一位數後面的位置,這就需要提前預處理輸出結果一共有幾位數

*/#include

#include

#include

using

namespace

std;

long

long sum[60],a[60

];long

long

n;int bin[1000],len,b[1000

];long

long pow(int

mi)int

main()

cin>>n;

int pos=lower_bound(sum+1,sum+38,n)-sum;//

pos就是數的位數

if(n==sum[pos-1])pos--;

//cout(n)

for(int i=1,j=len;i<=len;i++,j--)bin[i]=b[j];

bin[

1]--;bin[len]++;

if(bin[1]==0&&bin[2]==0)bin[2]=9

;

int now=len;

while(bin[now]>=10

)

int l=len,r=len+1

;

if(pos%2==1)l--;

while(l>=1

) l=1,r--;

while(bin[l]==0)l++;

while(bin[r]==0)r--;

for(int i=l;i<=r;i++)printf("%d"

,bin[i]);

}

洛谷P1015回文數

若乙個數 首位不為零 從左向右讀與從右向左讀都一樣,我們就將其稱之為回文數。例如 給定乙個十進位制數56,將56加65 即把5656從右向左讀 得到121是乙個回文數。又如 對於十進位制數8787 step1 87 78 165 step2 165 561 726 step3 726 627 135...

洛谷 P1015 回文數

題目描述 若乙個數 首位不為零 從左向右讀與從右向左讀都一樣,我們就將其稱之為回文數。例如 給定乙個十進位制數5656,將5656加6565 即把5656從右向左讀 得到121121是乙個回文數。又如 對於十進位制數8787 step1 8787 7878 165165 step2 165165 5...

洛谷P1015(回文數

若乙個數 首位不為零 從左向右讀與從右向左讀都一樣,我們就將其稱之為回文數。例如 給定乙個十進位制數 56,將 56 加 65 即把 5656 從右向左讀 得到 121 是乙個回文數。又如 對於十進位制數 87 step1 87 78 165 step2 165 561 726 step3 726 ...