計算第N位的形如12321的可逆數
我是先把1位,2位~100位數中各含幾個可逆數算出來,計入數組num,然后根據輸入的N位置,算出該數有幾位,并處于什么位置。依次通過取整取余得出結果。
如要求出第24位,因為1位數和2位數中各含9個可逆數,所以所要求的數位于3位數中的第6個
先用6對num【1】取整(三位數的個數其實就是最高和最低位從1到9,而中間只是1位數的個數加1(0)),
取整后得0,而0代表第一組1位數,所以應該加1,從而將1放入我們要輸出的數組。接著6對num【1】取余后是6,因為已經是最中間位了,所以就把5存入。輸出后得出151!
期間我也得到了很多WA,是因為沒有考慮到一些情況,大家要仔細啊!!!
#include <iostream>
#include <string>
#include <vector>
#include <cmath>
#include <algorithm>
using namespace std;

long long int num[101];

int main()


{
num[1]=9;num[2]=9;int j=0,k=0;
for (int i=3;i<=100;i++) //相應位數中有多少個對稱數

{
if (i%2==1)

{
num[i]=9*(num[i-2]+pow(10.0,j++));
}
else

{
num[i]=9*(num[i-2]+pow(10.0,k++));
}
}
long long int n;
while (scanf("%lld",&n)!=EOF&&n)

{
long long int sum=0,index;
int len;
for (int i=1;i<101;i++) //計算位數

{
sum+=num[i];
if (n<=sum)

{
len=i;
sum-=num[i];
break;
}
}
index=n-sum;
char output[100];
int kk=0;bool start=true;
for (int j=len;j>0;j-=2)

{
if ((j==1||j==2)&&start) //一位或二位時直接記錄

{
output[kk++]=index+'0';
break;
}
if ((j==1||j==2)&&start==false)

{
if (index==0) //余數為0時剛好為該位數中的最大數
output[kk++]='9';
else
output[kk++]=index+'0'-1;
break;
}
if(len%2==1) //位數為奇數時

{
if(start)
output[kk++]=index/(num[j-2]+(long long int)pow(10.0,(j-1)/2-1))+'0'+1; //開始時若整除為零,實際上是1
else
output[kk++]=index/(num[j-2]+(long long int)pow(10.0,(j-1)/2-1))+'0';
index%=(num[j-2]+(long long int)pow(10.0,(j-1)/2-1));
if (index==0&&output[kk-1]!='0')
output[kk-1]-=1;
else if (index==0&&output[kk-1]=='0') //余數為零即最大值
output[kk-1]='9';
start=false;
}
else

{
if(start)
output[kk++]=index/(num[j-2]+(long long int)pow(10.0,(j-2)/2-1))+'0'+1;
else
output[kk++]=index/(num[j-2]+(long long int)pow(10.0,(j-2)/2-1))+'0';
index%=(num[j-2]+(long long int)pow(10.0,(j-2)/2-1));
if (index==0&&output[kk-1]!='0')
output[kk-1]-=1;
else if (index==0&&output[kk-1]=='0')
output[kk-1]='9';
start=false;
}
}
for (int i=0;i<len/2;i++)

{
printf("%c",output[i]);
}
if (len%2==1)

{
for (int i=len/2;i>=0;i--)

{
printf("%c",output[i]);
}
}
else

{
for (int i=len/2-1;i>=0;i--)

{
printf("%c",output[i]);
}
}
printf("\n");
}
}

