c语言回文数二级题,回文数(二)-题解——清晰明了,简单易懂(C语言代码)

解题思路:

1、创建变量步数step = 0,右读的数字r_N,左读的数字l_N,十进制的右读和左读数字r_Ten,l_Ten

2、循环(判断是否是回文数)

若不是,则计算出从右读的数字,再将这两个数字转化为10进制数,进行加法计算,再转化成N进制数

步数+1

3、若是,则判断步数是否小于等于30,再输出相应的文本

注意事项:

1、这里最重要的是最后那个函数的代码

2、十进制和n进制之间的转化都用的是平时手算时候的技巧

参考代码:

主函数代码#include

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 

{

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 

{

temp *= 10;

}

m += temp * num[j];

i--;

}

return m;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值