原题链接:回文数(二)
解题思路:
对于输入,利用字符数组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 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复