算法分享:进制转换通用算法及示例
创作时间:
作者:
@小白创作中心
算法分享:进制转换通用算法及示例
引用
CSDN
1.
https://m.blog.csdn.net/2301_80303982/article/details/146163268
进制转换是编程和算法中的一个基础且重要的知识点。本文将分享几个常用的进制转换算法模板,并通过具体题目示例帮助读者更好地理解和掌握这些算法。
任意进制转十进制算法
将k进制的x转化为10进制的x
ll x=0;
for(int i=1;i<=n;++i)
{
x=x*k+a[i];
}
cout<<x<<endl;
十进制转任意进制算法
方法一
ll x;
cin>>x;
while(x)
{
a[++cnt]=x%k;
x/=k;
}
reverse(a+1,a+1+cnt);//翻转一下使得高位到1的位置
方法二(利用字符串)
这种方法更容易理解,特别是对于处理大数时。
char ch[] = { '0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F' };
string ans;
while (x)//10进制再转m进制
{
ans += ch[x % m];
x /= m;
}
reverse(ans.begin(), ans.end());//反向迭代器逆转输出
cout << ans << endl;
任意进制下数位求和算法
这个函数可以计算任意进制下数的数位之和。
int sumposition(int n, int base)
{
int sum = 0;
while (n > 0)
{
sum += n % base;
n /=base;
}
return sum;
}
题目一:十六进制转二进制
代码示例:
#include<iostream>
using namespace std;
using ll = long long;
const int N = 50;
int a[N];
int main()
{
string s = "2021ABCD";
for (int i = 0; i < s.length(); ++i)
{
if ('0' <= s[i] && s[i] <= '9')a[i + 1] = s[i] - '0';
else a[i + 1] = s[i] - 'A' + 10;
}
ll x = 0;
for (int i = 1; i <= s.length(); i++)
{
x = x * 16 + a[i];
}
cout << x << endl;
return 0;
}
运行结果:
题目二:九进制转十进制
代码示例:
#include<iostream>
using namespace std;
using ll = long long;
const int N = 10;
int a[N];
int main()
{
int n = 4;
string s = "2022";
for (int i = 1; i <= 4; i++)a[i] = s[i - 1] - '0';
ll x = 0;
for (int i = 1; i <= n; i++)x = x * 9 + a[i];
cout <<x<< endl;
return 0;
}
运行结果:
题目三:两次进制转换
这个题目需要先将N进制转10进制,再将10进制转m进制。
代码示例:
#include<iostream>
using namespace std;
using ll = long long;
const int N = 1000;
int a[N];
char ch[] = { '0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F' };
void solve()
{
int n, m; cin >> n >> m;
string s; cin >> s;
int len = s.length();
s = "#" + s;//方便从第一个位置开始处理
for (int i = 1; i <= len; ++i)
{
if ('0' <= s[i] && s[i] <= '9')a[i] = s[i] - '0';
else a[i] = s[i] - 'A' + 10;
}
ll x = 0;
for (int i = 1; i <= len; ++i)x = x * n + a[i];//N进制先转10进制
string ans;
while (x)//10进制再转m进制
{
ans += ch[x % m];
x /= m;
}
reverse(ans.begin(), ans.end());//反向迭代器逆转输出
cout << ans << endl;
}
int main()
{
ios::sync_with_stdio, cin.tie(0), cout.tie(0);
int t;
cin >> t;
while (t--)solve();
return 0;
}
运行结果:
题目四:时空传送门
这个题目需要计算1到2024中,在二进制和四进制下数位和相等的数的个数。
代码示例:
#include<iostream>
using namespace std;
//函数用于计算任意进制下数值的数位之和
int sumposition(int n, int base)
{
int sum = 0;
while (n > 0)
{
sum += n % base;
n /=base;
}
return sum;
}
int main()
{
int count = 0;
for (int i = 1; i <= 2024; ++i)
{
int binarysum = sumposition(i, 2);
int quatersum = sumposition(i, 4);
if (binarysum == quatersum){
++count;
}
}
cout << count << endl;
return 0;
}
运行结果:
热门推荐
《无天归来之黑莲化身》正式开机,黑子再演经典反派
24年后的《西游记后传》续集:无天能否再次一统三界?
24年后的《西游记后传》衍生剧:无天归来,能否再现经典魅力?
常见的法令纹4种类型是哪些?摆脱法令纹的烦恼:揭开真相,轻松应对法令纹问题
开窗通风vs不通风,对健康影响差别?冬天开窗通风有讲究!
涨知识!含“水”的古诗词你知道多少?带你玩转与“水”有关的“飞花令”!
鼻塞影响睡眠?4个方法改善鼻腔健康,提升睡眠质量
以合同约定“先票后款”为由抗辩付款,有效吗?
老年人睡眠质量改善指南
【耳鼻喉苑】鼻腔疾病预防,重在日常护理——让我们一起呵护“呼吸的门户”
鼻膜溃烂用什么药比较有效果
三门峡冬季打卡圣地,这些景点不容错过!
三门峡大坝风景区:自然与人文的绝美融合
探秘函谷关:三门峡两日游完美指南
高品质牛奶怎么挑选?
牛奶可以做成什么美食?
牛奶的秘密:了解它对你的影响
草莓种植黑科技:土壤改良秘籍
草莓中的维他命C和花青素,真的这么神奇?
家庭园艺新宠:盆栽草莓种植技巧
中央空调真的耗电吗?一文读懂中央空调与普通空调能耗差异
法令纹都是变老的表现?
《甄嬛传》再掀热潮,揭秘蒋欣演技秘籍
蒋欣:用真实与细节塑造角色,以过硬演技赢得观众认可
从华妃到樊胜美:蒋欣的演艺之路与转型
央视春晚西藏分会场,艺术家们惊艳登场!
《日光之城》演员亮相春晚,展现西藏多元文化魅力
侯耀文弟子郭晓小说:贾仑不是大师兄,郭德纲喊我师哥、师弟都对
角色设计大师班:形象塑造技巧
【牛奶百科】牛奶的营养价值 牛奶的功效与作用