蓝桥杯第2095题 九进制转十进制 简单 C++ 进制模板 附Java代码

题目

九进制转十进制icon-default.png?t=N7T8https://www.lanqiao.cn/problems/2095/learning/?page=1&first_category_id=1&name=%E4%B9%9D%E8%BF%9B

问题描述

本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。

九进制正整数 (2022)9(2022)9​ 转换成十进制等于多少?

运行限制

  • 最大运行时间:1s
  • 最大运行内存: 512M

思路和解题方法

  1. convert2ten 函数用于将一个 a 进制的数转换为十进制。它通过迭代取得输入数字 num 的各个位上的数字,并根据其权重相加以得到十进制表示。具体步骤是:取出 num 的最后一位(即当前位上的数字),乘以权重(a 的当前位数次幂),然后累加起来,最终得到十进制表示的结果。
  2. convert2other 函数用于将十进制数转换为 a 进制。它通过反复取余数和整除的操作,将十进制数转换为 a 进制表示。具体步骤是:反复地取十进制数除以 a 的余数,并将余数按顺序排列起来,直至十进制数变为 0,得到的余数序列就是 a 进制表示的结果。
  3. main 函数中调用了 convert2ten 函数,并将结果输出到控制台。

复杂度

        时间复杂度:

                O(log(num))

时间复杂度分析:

  • convert2ten 函数中的 while 循环需要对输入数字进行迭代,因此其时间复杂度为 O(log(num)),其中 num 是输入数字。
  • convert2other 函数中的 while 循环同样需要对输入数字进行迭代,因此其时间复杂度也为 O(log(num))。

        空间复杂度

                O(log(num))

空间复杂度分析:

  • convert2ten 函数中只使用了少量整型变量和一个临时变量,因此其空间复杂度为 O(1)。
  • convert2other 函数中使用了一个队列来存储余数,队列的大小取决于输入数字的大小,因此其空间复杂度为 O(log(num))。

c++ 代码

#include <bits/stdc++.h>  // 导入标准头文件

using namespace std;  // 使用标准命名空间

int convert2ten(int a, int num)  // 将a进制转换为十进制的函数
{
    int b = 0;  // 十进制结果
    int t;  // 临时变量
    int i = 0;  // 权重指数
    while (num != 0)  // 当输入数字不为0时
    {
        t = num % 10;  // 取出最后一位数字
        num = num / 10;  // 去掉最后一位数字
        b += t * pow(a, i);  // 根据权重相加
        i++;  // 权重指数自增
    }
    return b;  // 返回十进制结果
}

int convert2other(int a, int num)  // 将十进制转换为a进制的函数
{
    queue<int> mod;  // 用于存储余数的队列
    int t;  // 临时变量
    while (num != 0)  // 当输入数字不为0时
    {
        t = num % a;  // 求余数
        num = num / a;  // 整除
        mod.push(t);  // 将余数加入队列
    }
    int b = 0;  // 结果
    int i = 0;  // 权重指数
    while (!mod.empty())  // 当队列非空时
    {
        t = mod.front();  // 取出队首元素
        mod.pop();  // 弹出队首元素
        b += t * pow(10, i);  // 根据权重相加
        i++;  // 权重指数自增
    }
    return b;  // 返回a进制结果
}

int main()
{
    cout << convert2ten(9, 2022);  // 输出将9进制数2022转换为十进制的结果
    return 0;  // 返回执行成功
}

蓝桥杯官方题解

#include <iostream>
using namespace std;
int main()
{
    string s = "2022";  // 定义字符串s并初始化为"2022"
    int ans = 0;  // 初始化结果为0
    for (int i = 0; i < s.size(); i++)  // 遍历字符串s的每个字符
    {
        ans = ans * 9 + s[i] - '0';  // 将字符转换为数字并乘以9,然后加到结果上
    }
    cout << ans << endl;  // 输出结果
    return 0;
}

秒杀代码

#include <iostream>
int main(){std::cout<<1478;return 0;}

Java代码

import java.util.Scanner;
// 1:无需package
// 2: 类名必须Main, 不可修改

public class Main {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        String rs="2022";
        System.out.println(Integer.parseInt(rs,9));
        scan.close();
    }
}

觉得有用的话可以点点赞,支持一下。

如果愿意的话关注一下。会对你有更多的帮助。

每天都会不定时更新哦  >人<  。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值