//ac了,自己做的,但是注意末尾无空格的处理只有一行参考了书。另外输出那里可以更简洁,因为注意到无论是还是不是,都要输出进制形式的
//break是跳出最内层的循环(while,for)或switch,if什么的跟他无关
//大概题意:一个十进制,按照指定进制转换后的形式是否是回文数
/*是啊,break用于循环语句或分支选择,作用是跳出或者终止循环,例如
main()
{
int i,sum=0;
for(i=1;i<101;i++)
{
sum+=i;
if(i==50) break;
}
}
不用 if(i==50) break 时,求的是 1到100的和,用了break后只做1到50的循环 */
#include<stdio.h>
int main(){
int n,b;
int ans[40]={0};
int num=0;
int flag=0;//如果是-1表示不是回文
scanf("%d %d",&n,&b);
do{
//可以继续和上一题一样,存放在数组中,也很好判断是否是回文的,到时候用strlen判断的吧
ans[num++]=n%b;//先顺序放余数,到时候输出要逆序输出的
n/=b;
}while(n!=0);
//如果输出的话,要把num-1.才可倒序输出
//但是num的值是数字的长度。另外始终记得逆序,不过这里好像正序还是逆序没关系
//if(num%2==0){
//如果是偶数的话,就从0~num/2-1
int i=0,j=num-1;
do{
if(ans[i++]!=ans[j--]) {
flag=-1;
break;
}
}while(i<j);
/*}
else{
int i=0,j=num-1;
} */
if(flag==-1){//一开始这里写的是if(i<j),结果yes的案例对,no的案例错
//说明半途退出
printf("No\n");
for(int i=num-1;i>=0;i--){
printf("%d",ans[i]);
if(i!=0) printf(" ");
}
printf("\n");
}
else{
//如果最后i=j+1,或者i==j,说明遍历完全
printf("Yes\n");
for(int i=num-1;i>=0;i--){
printf("%d",ans[i]);
if(i!=0) printf(" ");
}
printf("\n");
}
return 0;
}
PAT A1019 General Palindromic Number
最新推荐文章于 2020-09-11 10:13:40 发布