PAT A1019 General Palindromic Number

//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;
}


你可能感兴趣的:(C++,算法,C语言,pat)