原题链接:蓝桥杯算法训练VIP-回文数
解题思路:
注意事项:
参考代码:
#include<cstdio> #include<cstring> char s[201]; int a[401],top; //数组a为高精度数组,top为它的长度 inline bool judge() //判断一个数是否回文 { int t=top/2; for (int i=0;i<=t;++i) if (a[i]!=a[top-i]) return true; return false; } int main() { int n,step=0; scanf("%d%s",&n,s); top=strlen(s)-1; for (int i=0;i<=top;++i) //将字符转化为数字 if (s[i]>='0'&&s[i]<='9') a[top-i]=s[i]-'0'; else a[top-i]=s[i]-55; //注意16进制 while (judge()) { if (step>30) //如果超过三十步就直接结束程序 return puts("Impossible!")&0; for (int i=0;i<=top;++i) //高精度加法不是很习惯边算边进位,习惯算完在进位 if (top-i>=i) a[i]+=a[top-i]; else a[i]=a[top-i]; //因为最后算出来的数如果不进位的话就一定是回文的,所以数组的后一半直接复制前一半就好了 for (int i=0;i<=top;++i) //进位 if (a[i]>=n) a[i+1]++,a[i]-=n; if (a[top+1]) //注意如果首位进位,长度要增加 top++; step++; } printf("STEP=%d\n",step); return 0; }
0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复