实现九进制转十进制

题目要求:九进制正整数 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)应该会有其他高效率的方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值