您的位置:首页 > 其它

Palindrome Numbers(LA2889)第n个回文数是?

2015-06-10 13:46 323 查看

J - Palindrome Numbers

Time Limit:3000MS Memory Limit:0KB 64bit IO Format:%lld & %llu

Submit Status Practice UVALive 2889



WA了一版面,我也是醉了,就因为一个编译环境不同。。。。。。

说多了都是泪。



题目链接:请点击UVALive 2889

转载请注明出处:

寻找&星空の孩子

#include<stdio.h>
#define LL long long
#define MM 2000000000
LL num[25]= {0};
LL ppow(LL x,LL y)
{
LL tp=1;
while(y--)
{
tp*=x;
}
return tp;
}

void init()
{
LL tp=9,i;
for(i=1;;)
{
num[i]=num[i-1]+tp;
i++;//同行有多个i要处理的时候i,不要把i++放里面,因为变异环境不同;运算顺序不同,可能会wa
num[i]=num[i-1]+tp;
i++;
tp=tp*10;
if(num[i-1]>=MM)break;
}

/* for(int i=1;i<21;i++)
{
LL p=(i+1)/2-1;
num[i]=num[i-1]+9*ppow(10,p);
//        printf("%lld\n",num[i]);
}
//    printf("%lld\n",num[0]);*/
}

int main()
{
init();
LL n;
LL a[20];
while(scanf("%lld",&n),n)
{
int len=0;
for(int i=1; i<=20; i++)
{
if(n<=num[i])
{
len=i;
break;
}
}
//      printf("len=%d\n",len);
LL m=n-num[len-1];
int l=(len+1)/2;
//       printf("m=%lld\tl=%d\n",m,l);
LL ans=ppow(10,l-1)+m-1;
//       printf("ans=%lld\tppow=%lld\n",ans,ppow(10,l-1));
printf("%lld",ans);
if(len&1) ans/=10;
while(ans)
{
printf("%lld",ans%10);
ans/=10;
}
printf("\n");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: