P1143 进制转换

题目传送门

C++代码

#include <bits/stdc++.h>

using namespace std;

//单个字母转换成数字 0-F
int char_to_int(char a) {
    return '0' <= a && a <= '9' ? a - '0' : 10 + a - 'A';
}

//0-15之间的数字转为16进制的数字
char int_to_char(int a) {
    return a <= 9 ? '0' + a : a - 10 + 'A';
}

int n;          //原始的n进制
int m;          //要转换成的m进制
string input;   //输入的原始数字

int d;          //原始数转为十进制的数字是多少,这是一个中间过程
vector<int> output; //用一个数字数组

/**
 * 测试用例:
 16  FF  2
 答案: 11111111

 测试用例2:
 15 5CBD1460 2
 答案:
 111011100110101100100111110110
 */
int main() {
    //题意:将输入的n进制数input转为m进制
    cin >> n >> input >> m;

    //原数转换为十进制,从左向右噢
    for (int i = 0; i < input.size(); i++)//遍历输入字符串的每一位,一边转每一位是十进制,一边乘n,累加,得到换算后的十进制数。
        d = d * n + char_to_int(input[i]);//秦九韶算法,就是迭代方式提高效率

    //输出测试一下:255
    //cout << d << endl;

    //将十进制数转换为m进制数的每一位是多少
    while (d) output.push_back(d % m), d /= m;//一路取余保存,得到一个反向的数字序列。学习这种静态数组+idx的用法,很好用,速度快。

    //转换好的数字,按m进制数的标准样式输出
    for (int i = output.size() - 1; i >= 0; i--) cout << int_to_char(output[i]);
    return 0;
}
posted @   糖豆爸爸  阅读(116)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
历史上的今天:
2019-08-17 基于JFinal中搭建wopi协议支撑办法
2014-08-17 转发给吴斌
Live2D
点击右上角即可分享
微信分享提示