原题链接:回文数(二)
解题思路:首先我的第一想法是将n进制数转换为十进制数,然后让十进制数进行相加并判断相加后的十进制数是否为回文数,当然这样并不行。后面我又想我可不可以将相加后十进制数转回原来的进制,但是这样又太麻烦了。所以首先是先翻转数字,然后将这两个n进制数进行相加并判断是否为回文数。
注意事项:如果带有字母的话,程序就无法运行,所以还可以继续完善。本题没有考虑字母就可以通过,如有什么问题,请各位大佬指正!
参考代码:
#include <stdio.h> #include <math.h> int numAdd(int n,int a,int b)//n进制加法 { int arr[10],i=0,res=0; int aa,bb,s,t=0; while(1) { aa=a%10; bb=b%10; s=aa+bb+t; if(s<n) { arr[i]=s; t=0; } else { arr[i]=s%n; t=1; } a/=10; b/=10; i++; if(a==0&&t==0) break; } for(int j=i-1;j>=0;j--) { res=(res+arr[j])*10; } return res/10; } int revNum(int n)//翻转数字 { int s=0; while(n) { int t=n%10; s=(s+t)*10; n/=10; } return s/10; } int isHuiwen(int n)//判断是否为回文数 { int a[10],i=0; while(n) { a[i]=n%10; n/=10; i++; } for(int j=0;j<i/2;j++) { if(a[j]!=a[i-j-1]) return 0; } return 1; } int main() { int n,m,i; scanf("%d%d",&n,&m); int t=revNum(m); for(i=1;i<=30;i++) { if(isHuiwen(numAdd(n,m,t))) break; m=numAdd(n,m,t); t=revNum(m); } if(i>30) printf("Impossible"); else printf("STEP=%d",i); }
0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复