题目要求:九进制正整数 2024转换成十进制等于多少?直接输出答案。
编程语言:C++
运行环境:Dev C++ 5.11
解题思路:九进制从低位向高位计算:4 * 9^0 + 2 * 9^1 + 0 * 9^2 + 2 * 9^3
代码实现:(代码特点是不需要额外的库,但是代码量比较多,效率也不是很高。)
#include <iostream>
using namespace std;
/** 九进制转十进制
* 输入:九进制
* 输出:十进制
*/
int Trans9to10(int n9)
{
// 小于10的是原始数据
if (n9 < 10)
{
return n9;
}
// 输出量
int n10 = 0;
// 一开始是取个位,9的0次幂
int times = 1;
// 循环取位
for (;;)
{
// 取最低的一位算进去,乘以九的次幂
int remain = n9 % 10;
n10 += remain * times;
// 如果是最后一位,收工
if (n9 < 10)
{
break;
}
// 下一次循环准备,九的次幂增加
n9 /= 10;
times *= 9;
}
return n10;
}
int main()
{
int n9 = 2022;
int n10 = Trans9to10(n9);
cout << n10 << endl;
return 0;
}
编后感触:DEV C++的调试功能,放到监控区的变量,下次调试可能显示不对,最好是清掉,重新监控;没有使用pow函数,不怎么喜欢用这个函数。
其他人的做法:
(1)用字符串转换的,用额外库实现简单的代码:
#include <bits/stdc++.h>
cout << std::stoi("2024", nullptr, 9);
(2)跟上面一样,但是不用额外库的:
cout<<strtol("2024",NULL,9);
(3)自己把上面的字符串进制转换功能实现的:
char a[]="2024";
const int loop=strlen(a);
int ten=0;
for(int i=0;i<loop;++i)
{
ten=ten*9+a[i]-'0';
}
(4)比之前运算更为精炼的代码:
// 进制可以设置为其他的进制
int radix=9, ten=0;
for(int nine=2024, times=1; nine; nine/=10, times*=radix)
{
ten = ten + nine % 10 * times;
}
printf("%d", ten);
Java的实现:
(1)字符串转换:
Integer.parseInt("2024",9)
Python实现:
(1)字符串转换:
int('2024',9)
总结:
(1)字符串转换的方法对每一种语言都有库函数可以调用,方便并且减少代码量;
(2)直接计算的方法主要是检验对于进制转换的理解;
(3)应该会有其他高效率的方法。
4606

被折叠的 条评论
为什么被折叠?



