原题链接:回文数(二)
解题思路:
1、创建变量步数step = 0,右读的数字r_N,左读的数字l_N,十进制的右读和左读数字r_Ten,l_Ten
2、循环(判断是否是回文数)
若不是,则计算出从右读的数字,再将这两个数字转化为10进制数,进行加法计算,再转化成N进制数
步数+1
3、若是,则判断步数是否小于等于30,再输出相应的文本
注意事项:
1、这里最重要的是最后那个函数的代码
2、十进制和n进制之间的转化都用的是平时手算时候的技巧
参考代码:
主函数代码
#include<stdio.h> int isreturn(int n); int ten(int n, int N); int turn_n(int n, int N); int right(int n); int main(int argc, char* argv[]) { int step, r_N, l_N, r_Ten, l_Ten, N, sum_Ten; step = 0; scanf("%d%d", &N, &l_N); while (isreturn(l_N) == 0) { r_N = right(l_N); //计算出右读的数字 sum_Ten = 0; /*转化为十进制数*/ r_Ten = ten(r_N, N); l_Ten = ten(l_N, N); sum_Ten = r_Ten + l_Ten; //计算十进制下的和 l_N = turn_n(sum_Ten, N); //转化为n进制,并赋值给下一个数 step++; } /*当是回文数字的时候,输出*/ if (step <= 30) { printf("STEP=%d\n", step); } else { printf("Impossible\n"); } return 0; }
判断是否是回文数函数代码
/*判断是否为回文数,是的话返回1,否则返回0*/ int isreturn(int n) { if (n == right(n)) { return 1; } return 0; }
n进制转化成十进制,返回十进制数
例如:9进制的87转化为10进制数
8*9[1]+7*9[0] = 79(十进制) [x]表示x次方
int ten(int n, int N) { int m = 0, temp, i = 0; while (n > 0) { temp = 1; /*得到乘数*/ for (int j = 0; j < i; j++) { temp = temp * N; } m += temp * (n % 10); n = n / 10; i++; } return m; }
十进制转化为N进制,返回n进制数
n除以N的余数乘以1
除数再除以N乘以10
.....
int turn_n(int n, int N) { int m = 0, temp = 1; while (n > 0) { m += temp * (n % N); temp *= 10; n = n / N; } return m; }
计算右读的数字,返回右读的数字
1、将n的每一个数字从个位开始取出来,放到数组中
2、循环
让数组的第一个数乘以10的(i-1)次方
将这个数字加到m中
数组位置++,(i-1)次方数--
3、返回这个右读的数字
int right(int n) { int m = 0, i = 0, temp; int num[10] = { 0 }; /*当n大于0时*/ while (n > 0) { num[i] = n % 10; //个位数给数组 n = n / 10; i++; } for (int j = 0; i > 0; j++) { temp = 1; /*得到数组对应的乘数*/ for (int k = 1; k < i; k++) { temp *= 10; } m += temp * num[j]; i--; } return m; }
0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复