OJ_进制转换

十进制转为8进制数

  • 以字符串形式来保存最后的8进制数
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>  
#include <algorithm> // 包含 std::reverse

//如何进行10进制到8进制转换?
//步骤1: 10进制数字除以8, 获得整数商和余数
//步骤2: 把第一步的余数转换成8进制字符
//步骤3: 用第一步的整数商继续除以8并重复步骤1, 直到为0

void SysConvert(int num) {
    char result[100] = {'0'};//结果通过字符数组存储
    
    int length = 0;//记录结果的长度
    while (num / 8 != 0) {
        result[length] = (num % 8) + '0';
        length++;
        num /= 8;
    }
    result[length] = num + '0';
    length++;

    // 使用 std::reverse 反转字符数组  
    std::reverse(result, result + length);
    printf("%s", result);
}

int main() {
    int n;
    //输入一个十进制数
    scanf("%d", &n);
    SysConvert(n);
    return 0;
}

十进制转为2进制数

在这里插入图片描述

#include <iostream>
#include <vector>
using namespace std;

int main()
{
    unsigned int u;
    while(scanf("%u",&u) != EOF){
        if(u == 0){
            printf("0\n");
            continue;
        }
        vector<int> binVec;//用动态数组存储二进制序列
        while(u > 0){
            binVec.push_back(u % 2);
            u = u / 2;
        }
        for(int i = binVec.size() - 1; i >= 0 ; --i){
            printf("%d",binVec[i]);
        }
        printf("\n");
    }
    return 0;
}

### 东华OJ平台上十进制转换方法 在处理东华OJ平台上的数值或问题答案时,如果需要将其他进制的数(如二进制、八进制、十六进制等)转换为十进制形式,可以采用如下方式实现。 #### 数学原理 对于任意一个N进制数,其表示形式可以通过按权展开的方式转化为十进制数。假设有一个N进制数`d_k d_{k-1} ... d_1 d_0`,其中每一位`d_i`都是小于N的一个整数,则该数可以用以下公式计算出对应的十进制值: \[ D = \sum_{i=0}^{k} (d_i \times N^i) \] 例如,在十六进制中,`A`对应十进制中的`10`,因此十六进制数`ABCD`可以被分解并按照上述公式进行计算[^2]。 #### 实现代码 以下是基于Python语言编写的通用函数,用于将不同进制下的字符串表示形式转换为十进制整数: ```python def convert_to_decimal(number_str, base): """ 将指定基数的数字字符串转换为十进制整数。 参数: number_str (str): 输入的数字字符串,支持大小写字母。 base (int): 基数范围为2到16之间的整数。 返回: int: 转换后的十进制整数。 """ if not (2 <= base <= 16): raise ValueError("Base must be between 2 and 16.") digits_map = { '0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9, 'A': 10, 'B': 11, 'C': 12, 'D': 13, 'E': 14, 'F': 15 } is_negative = False if number_str.startswith('-'): is_negative = True number_str = number_str[1:] decimal_value = 0 power = 0 for char in reversed(number_str.upper()): if char not in digits_map or digits_map[char] >= base: raise ValueError(f"Invalid character '{char}' for base {base}.") decimal_value += digits_map[char] * (base ** power) power += 1 return -decimal_value if is_negative else decimal_value # 测试用例 print(convert_to_decimal('FF', 16)) # 输出:255 print(convert_to_decimal('1010', 2)) # 输出:10 print(convert_to_decimal('7B', 16)) # 输出:123 print(convert_to_decimal('-ABC', 16)) # 输出:-2748 ``` 此代码实现了从任何给定进制(2至16之间)转为十进制的功能,并考虑到了可能存在的负号情况[^1]。 #### 注意事项 当输入的数据包含多个测试实例时,应逐一读取每组数据并对每一组分别调用上述函数完成转换操作。此外,需严格按照题目要求控制输出格式,确保无多余空白字符以及满足特定分隔符需求[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值