题解 | #数制转换#

数制转换

https://www.nowcoder.com/practice/8ef02ef8571b417d8c311a87861f7a03

//土尔逊Torson 编写于2023/5/06
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <cstdio>
#include <string>
#include <vector>

using namespace std;

char IntToChar06501(int x) {      //数字转字符
	if (x < 10) {
		return x + '0';
	}
	else {
		return x - 10 + 'a';
	}
}

int CharToInt06501(char c) {      //字符转数字
	if (c >= '0' && c <= '9') {
		return c - '0';
	}
	else{
		return c - 'A' + 10;
	}
}

int getpos(string str) {           //获取空格位置
	int pos;
	for (unsigned int i = 0; i < str.size(); ++i) {
		if (str[i] == ' ') {
			pos = i;
			break;
		}
	}
	return pos;
}

string upper(string str) {         //转换成大写字母
	for (unsigned int i = 0; i < str.size(); ++i) {
		if (str[i] >= 'a'&& str[i] <= 'f') {
			str[i] = str[i] - 32;
		}
	}
	return str;
}

int main() {
	int m, n;
	string str;
	while (getline(cin, str)) {
		int pos = getpos(str);      //全部字母转换成大写字母
		str = upper(str);
		string aS, bS;              //从字符串截取 题意输入的数字 a 和 b,并保留 N 字符串
		aS = str.substr(0, pos);
		str = str.substr(pos + 1);
		pos = getpos(str);
		bS = str.substr(pos + 1);
		str = str.substr(0, pos);

		m = stoi(aS);
		n = stoi(bS);

		long long number = 0;
		for (int i = 0; i < str.size(); ++i) {        //m进制转十进制
			number *= m;
			number += CharToInt06501(str[i]);
		}
		vector<char> answer;
		while (number != 0) {                         //十进制转n进制
			answer.push_back(IntToChar06501(number % n));
			number /= n;
		}
		for (int i = answer.size() - 1; i >= 0; --i) { //逆序输出
			if (answer[i] >= 'a'&& answer[i] <= 'f') { //结果全部转换成大写输出
				answer[i] = answer[i] - 32;
			}
			printf("%c", answer[i]);
		}
		printf("\n");
	}
	system("pause");
	return EXIT_SUCCESS;
}
// 64 位输出请用 printf("%lld")

全部评论

相关推荐

CARLJOSEPH...:宝宝你戾气太大了
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
昨天 10:39
一个证都没&nbsp;我能填什么
凉风落木楚山秋:空白不是说你没证吧,有实践也行
点赞 评论 收藏
分享
认真搞学习:这么良心的老板真少见
点赞 评论 收藏
分享
06-17 21:57
门头沟学院 Java
白友:噗嗤,我发现有些人事就爱发这些,明明已读不回就行了,就是要恶心人
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务