更多详细内容参见此博客 传送门
作者的号在这里
前言
还在为搞不懂进制转换的原理而感到苦恼吗?
还在为考试因为进制转换惨痛离场吗?
还在为不会打进制转换代码而沮丧吗?
STL库函数+进制转换极简代码
满足你的一切需求!
怎样实现进制转换(有几种方式)
- 自定义进制转换函数:
将一个n进制的数转换为m进制的数,这个过程需要一个过渡,就是先将一个n进制的数转换为10进制,再将十进制数转换为m进制的数,任意进制转换为十进制的思路就是按权展开,十进制转任意进制就是求余数,直到商数为零,然后逆向取余。
- 调用C++中的STL函数直接转换(着重讲解)
实现
首先,让我隆重欢迎
printf的自带进制转换和cout自带进制转换
作为c++“特性”,STL库里带几个函数是很正常的
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <bitset>
using namespace std;
int main(){
printf("%05o\n",300); //按八进制格式输出,保留5位高位补零
printf("%03d\n",300); //按十进制格式输出,保留3位高位补零
printf("%05x\n",300); //按十六进制格式输出,保留5位高位补零
cout<<"300的8进制:" <<std::oct <<300<<endl; //按八进制格式输出
cout<<"300的10进制:" <<std::dec <<300<<endl; //按十进制格式输出
cout<<"300的16进制:" <<std::hex <<300<<endl; //按十六进制格式输出
cout<<"300的2进制:" <<bitset<8>(300)<<endl; //<8>:表示保留8位输出
return 0;
}
还算有点帮助吧?如果这个还是记不住,那么下面这个maybe正合你的心意
_itoa() 函数:
头文件: #include
作用: 将一个10进制数转换为任意的2-36进制字符串
格式: itoa(num, str, m); num是一个int型的,是要转化的10进制数,str是转化结果,m为目标进制。
#include<cstdio>
#include<cstdlib>
int main(){
int num = 10;
char str[100];
_itoa(num, str, 2); //c++中一般用_itoa,用itoa也行,
printf("%s\n", str);
return 0;
}
函数的世界真奇妙,STL函数合心意
去刷几道题吧!
P1143 进制转换
B2143 进制转换
P2084 进制转换
B3620 x 进制转 10 进制
B3619 10 进制转 x 进制
B3869 [GESP202309 四级] 进制转换
B3849 [GESP样题 三级] 进制转换
附上# B3869 [GESP202309 四级] 进制转换官方代码
#include <iostream>
#include <cstring>
using namespace std;
int trans_digit(int k, char c) {
if (c <= '9')
return (c - '0');
return (c - 'A' + 10);
}
long long trans(int k, char str[]) {
int l = strlen(str);
long long res = 0, pw = 1;
for (int i = l - 1; i >= 0; i--) {
res += pw * trans_digit(k, str[i]);
pw *= k;
}
return res;
}
int main() {
int n = 0;
cin >> n;
for (int t = 0; t < n; t++) {
int k = 0;
char str[10];
cin >> k >> str;
cout << trans(k, str) << endl;
}
return 0;
}
标签:10,转换,进制,int,知识,str,include
From: https://www.cnblogs.com/Gary-NotFound/p/17939238