1999普及组-回文数




链接:https://www.nowcoder.com/acm/contest/153/1074
来源:牛客网
1999普及组-回文数
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 131072K,其他语言262144K
64bit IO Format: %lld

题目描述

若一个数(首位不为零)从左向右读与从右向左读都一样,我们就将其称之为回文数。

例如:给定一个10进制数56,将56加56(即把56从右向左读),得到121是一个回文数。
又如:对于10进制数87:

STEP1:87+78  = 165                  STEP2:165+561 = 726

STEP3:726+627 = 1353                STEP4:1353+3531 = 4884

在这里的一步是指进行了一次N进制的加法,上例最少用了4步得到回文数4884。

写一个程序,给定一个N(2<=N<=10,N=16)进制数M,求最少经过几步可以得到回文数。如果在30步以内(包含30步)不可能得到回文数,则输出“Impossible!”

输入描述:

两行,分别是N,M。

输出描述:

STEP=ans(ans表示答案)
示例1

输入

复制
9
87

输出

复制
STEP=6





#include <stdio.h>
#include <string.h>
intN,a[500],b[500],step=0;
chars[500];
voidadd(inta[],intb[])
{
inti;
for(i=1;i<=a[0];i++)
{
a[i]+=b[i];
a[i+1]+=a[i]/N;
a[i]%=N;
}
if(a[a[0]+1]>0)a[0]+=1;
}
intjudge(inta[])
{
inti;
for(i=1;i<=a[0]/2;i++)
if(a[i]!=a[a[0]-i+1])
return0;
return1;
}
voidoverturn(inta[])
{
inti,j=0;
b[0]=a[0];
for(i=a[0];i>=1;i--)
b[++j]=a[i];
}
voidprint(inta[])
{
inti;
for(i=a[0];i>=1;i--)
printf("%d",a[i]);
printf("\n");
}
intmain()
{
intlen,i,k=0;
scanf("%d%s",&N,s);
len=strlen(s);
for(i=len-1;i>=0;i--)
if('0'<=s[i]&&s[i]<='9')
a[++k]=s[i]-'0';
elseif('a'<=s[i]&&s[i]<='z')
a[++k]=s[i]-'a'+10;
elseif('A'<=s[i]&&s[i]<='Z')
a[++k]=s[i]-'A'+10;
a[0]=len;
while(judge(a)==0)
{
overturn(a);
add(a,b);
step++;
if(step==31)break;
}
if(step==31)
printf("Impossible!");
elseprintf("STEP=%d",step);
return0;
}

全部评论

相关推荐

昨天 17:51
南昌大学 Java
在做ppt的袋鼠很完美:隔了三星期被放进人才库的我
点赞 评论 收藏
分享
ProMonkey2024:5个oc?厉害! 但是有一个小问题:谁问你了?😡我的意思是,谁在意?我告诉你,根本没人问你,在我们之中0人问了你,我把所有问你的人都请来 party 了,到场人数是0个人,誰问你了?WHO ASKED?谁问汝矣?誰があなたに聞きましたか?누가 물어봤어?我爬上了珠穆朗玛峰也没找到谁问你了,我刚刚潜入了世界上最大的射电望远镜也没开到那个问你的人的盒,在找到谁问你之前我连癌症的解药都发明了出来,我开了最大距离渲染也没找到谁问你了我活在这个被辐射蹂躏了多年的破碎世界的坟墓里目睹全球核战争把人类文明毁灭也没见到谁问你了(别的帖子偷来的,现学现卖😋)
点赞 评论 收藏
分享
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务