任意进制转换(2进制、8进制、16进制等)
时间:2022-07-25
本文章向大家介绍任意进制转换(2进制、8进制、16进制等),主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
文章目录
- 写在前面
- C
- C++
- 任意进制转换函数
写在前面
今天网络赛有道题涉及进制转换,最后时间不够了,气死我了。还是对进制转换太生疏了,所以决定对进制转换总结一下。
C
格式 |
进制 |
---|---|
%d |
10进制 |
%o |
8进制 |
%x |
16进制(小写) |
%X |
16进制(大写) |
虽然没有二进制,但可以直接读写8和16进制。
#include<bits/stdc++.h>
using namespace std;
int main() {
int x;
scanf("%d", &x);
printf("%dn", x);
printf("%on", x);
printf("%xn", x);
printf("%Xnn", x);
scanf("%o", &x);
printf("%dn", x);
printf("%on", x);
printf("%xn", x);
printf("%Xnn", x);
scanf("%x", &x);
printf("%dn", x);
printf("%on", x);
printf("%xn", x);
printf("%Xn", x);
return 0;
}
如果要调用转换结果,可以用sprintf()和sscanf()进行操作。
#include<bits/stdc++.h>
using namespace std;
int main() {
int x, y;
char s[100];
scanf("%d", &x);//x从10进制转换为8进制存进y
sprintf(s,"%o", x);
sscanf(s, "%o", &y);
//得到y并进行相关操作。。
printf("%onn", y);
scanf("%o", &x);//x从8进制转换为16进制存进y
sprintf(s, "%x", x);
sscanf(s, "%x", &y);
printf("%xnn", y);
scanf("%X", &x);//x从16进制转换为10进制存进y
sprintf(s, "%d", x);
sscanf(s, "%d", &y);
printf("%dnn", y);
return 0;
}
C++
c++的与c类似,也可以直接读写8进制和16进制。
格式 |
进制 |
---|---|
dec |
10进制 |
oct |
8进制 |
hex |
16进制 |
#include<bits/stdc++.h>
using namespace std;
int main() {
int x;
cin >> x;
cout << oct << x << "nn";//10转8
cin >> oct >> x;
cout << hex << x << "nn";//8转16
cin >> hex >> x;
cout << dec << x;//16转10
return 0;
}
以及对应的stringstream,头文件是< sstream >
#include<bits/stdc++.h>
using namespace std;
int main() {
int x, y;
stringstream st;
cin >> x; //10转8存进y
st << oct << x;
st >> dec >> y;
cout << y;
return 0;
}
比赛主要是用C/C++,其他语言就暂不罗列了。
任意进制转换函数
自己写的进制转换函数,理论是到36进制(因为字母不够 ),如果要字母大写改一下就好了,若有错请斧正。
string trans(string num ,int from ,int to) { //num待转换数,from和to表示进制
ll tmp, ten = 0;
string ans;
char c;
for(int i=0;i<num.size();i++){ //from进制转换为10进制
ten *= from;
if (num[i] >= '0' && num[i] <= '9')
tmp = num[i] - '0';
else tmp = num[i] - 'a' + 10;
ten += tmp;
}
//cout << ten << "n";
while (ten) { //10进制转换为to进制
tmp = ten % to;
c = tmp < 10 ? tmp + '0' : tmp - 10 + 'a';
ans += c;
ten /= to;
}
reverse(ans.begin(), ans.end());
return ans;
}
测试结果
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
string trans(string num ,int from ,int to) { //num待转换数,from和to表示进制
ll tmp, ten = 0;
string ans;
char c;
for(int i=0;i<num.size();i++){ //from进制转换为10进制
ten *= from;
if (num[i] >= '0' && num[i] <= '9')
tmp = num[i] - '0';
else tmp = num[i] - 'a' + 10;
ten += tmp;
}
//cout << ten << "n";
while (ten) { //10进制转换为to进制
tmp = ten % to;
c = tmp < 10 ? tmp + '0' : tmp - 10 + 'a';
ans += c;
ten /= to;
}
reverse(ans.begin(), ans.end());
return ans;
}
int main() {
//测试2,8,10,16进制相互转换
cout << trans("351306", 8, 2) << "n";
cout << trans("946351", 10, 2) << "n";
cout << trans("a6b816", 16, 2) << "n";
cout << "n";
cout << trans("101111111001", 2, 8) << "n";
cout << trans("13541913", 10, 8) << "n";
cout << trans("a6b8c9def", 16, 8) << "n";
cout << "n";
cout << trans("10000001", 2, 10) << "n";
cout << trans("6543210", 8, 10) << "n";
cout << trans("fe60a6b8c", 16, 10) << "n";
cout << "n";
cout << trans("1101010101", 2, 16) << "n";
cout << trans("66240", 8, 16) << "n";
cout << trans("98109813", 10, 16) << "n";
return 0;
}
原创不易,请勿转载(
本不富裕的访问量雪上加霜) 博主首页:https://blog.csdn.net/qq_45034708
- 3555: [Ctsc2014]企鹅QQ
- 3381: [Usaco2004 Open]Cave Cows 2 洞穴里的牛之二
- 3097: Hash Killer I
- 3390: [Usaco2004 Dec]Bad Cowtractors牛的报复
- 1684: [Usaco2005 Oct]Close Encounter
- 算法模板——Dinic最小费用最大流
- 算法模板——Dinic网络最大流 1
- SQL Server 使用全文索引进行页面搜索
- 2764: [JLOI2011]基因补全
- 1000: A+B Problem(NetWork Flow)
- 博弈论进阶之Multi-SG
- 2929: [Poi1999]洞穴攀行
- SQL Server 执行计划缓存
- 1081: [SCOI2005]超级格雷码
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 聊聊claudb的keys command
- 聊聊claudb的server command
- 聊聊claudb的Database
- 聊聊claudb的SlaveReplication
- flutter doctor 卡死
- Angular如何自定义attribute指令
- 聊聊claudb的MasterReplication
- k8s 之yaml文件基本格式
- 你可能不知道的pandas的5个基本技巧
- Node 脚本遭遇异常时如何安全退出
- flutter Running Gradle task 'assembleDebug'
- 如何使用 docker 高效部署 Node 应用
- fish-redux框架路由配置报错问题
- Flutter fish-redux 简单使用
- Flutter 项目.gitignore配置