零星


私信TA

用户名:uq_21413843803

访问量:432

签 名:

等  级
排  名 15921
经  验 823
参赛次数 0
文章发表 2
年  龄 0
在职情况 学生
学  校
专  业

  自我简介:

TA的其他文章

解题思路:
对于输入,利用字符数组A进行存储N进制的数,如果该N进制数本身就是一个回文数,那么步骤为0,循环结束;

循环结束的出口为得到一个回文数的结果,或者步骤已经超过30步

函数:  f:将A翻转存储在B中

            huiwen:判断一个数组是否是回文数

            add:将两个字符数组相加,结果存储在A中

            reset:将数组A把变成符合N进制的形式


注意事项:

参考代码:

#include<stdio.h>
#include<string.h>
void f(char A[],char B[]){
	int i,j;
	for(i=strlen(A)-1,j=0;i>=0;i--,j++)
		B[j]=A[i];
	
}
int huiwen(char A[]){
	int i,j;
	for(i=strlen(A)-1,j=0;i>=j;i--,j++)
		{
			if(A[i]!=A[j])
				return 0;
		}
	return 1;
}
void add(char A[],char B[]){
	int i;
	for(i=0;i<strlen(A);i++)
		A[i]=(A[i]-'0'+B[i]-'0')+'0';
	
}
void reset(char A[],int N){
	int i;
	for(i=strlen(A)-1;i>=1;i--)
		{
			if((A[i]-'0')>=N)
				{
					A[i-1]=(A[i-1]-'0')+(A[i]-'0')/N+'0';
					A[i]='0'+(A[i]-'0')%N;
				}
		}
	
	if((A[0]-'0')>=N)
		{
			int temp=(A[0]-'0')/N;
			for(i=strlen(A)-1;i>=1;i--)
				A[i+1]=A[i];
			A[1]='0'+(A[0]-'0')%N;
			A[0]='0'+temp;
			
		}
	
	
}
int main(){
	
	char A[100],B[100];
	int N;
	scanf("%d",&N);
	getchar();
	scanf("%s",A);
	int flag=1;
	int count=0;
	while(1){
		if(huiwen(A)||count>30){
			break;
		}
		else{
			count++;
			f(A,B);
			add(A,B);
			reset(A,N);
		}
	}
	if(count>30)
		printf("Impossible!\n");
	else
		printf("STEP=%d\n",count);
}


 

0.0分

0 人评分

  评论区

  • «
  • »