解题思路:
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++代码)浏览:1410 |
A+B for Input-Output Practice (VII) (C++代码)浏览:643 |
C语言程序设计教程(第三版)课后习题9.6 (C语言代码)浏览:287 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:585 |
C语言程序设计教程(第三版)课后习题6.3 (C语言代码)浏览:690 |
C语言程序设计教程(第三版)课后习题6.1 (C语言代码)浏览:582 |
蛇行矩阵 (C语言代码)浏览:607 |
文科生的悲哀 (C语言代码)浏览:1552 |
1128题解(返回值为数组的情况)浏览:571 |
DNA (C语言代码)浏览:798 |