算法分享:进制转换通用算法及示例
创作时间:
作者:
@小白创作中心
算法分享:进制转换通用算法及示例
引用
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;
}
运行结果:
热门推荐
告别纸片人:6大技巧打造立体角色
盐酸氨溴索口服溶液:全方位解析其功效与使用注意事项
云南白药:从传统秘方到现代医学的瑰宝
白药水:公共卫生的新宠儿
从落魄中年到辽东边帅:李成梁的传奇人生
专利买卖必读:转让、许可、质押等交易方式全解析
中国版权保护中心教你申请著作权
养老金计算助力个人理财规划
冬季流感高发,如何礼貌询问家人健康?
春节期间免门票,东莞这18个A级景区任玩
春运火车票已发售3810万张,这些方向尚有余票
翔云镇采茶文化节:全家总动员,体验茶文化
月球专家解读:月亮在潮汐、气候与文化中的关键作用
教资面试需要准备什么?
戴拿奥特曼星光战士:特效升级,角色更有温度
新疆四季变换,每个季节都有看不完的美景
从战略到人心:项羽失败的三大致命错误
战略短视、用人不当,项羽三重失误致楚汉败局
战略短视、人心失控:项羽败亡的两大致命伤
什么是 ISO14064 认证?ISO14064温室气体核算的意义
春游香格里拉:10天玩转雪山草原和藏族文化
冬日黄冈双体验:南武当滑雪场与里畈温泉游玩全攻略
南武当滑雪场:南方人的冰雪乐园
3.4万亿元企业年金面临增长困境,专家建议打破“所有制偏好”
FDA首次批准达格列净用于儿童2型糖尿病
从痕迹到成绩:英语多义词“mark”的多重含义
精准定位的幕后功臣:揭秘“mark”在视频编辑和PCB设计中的应用
告别电量焦虑:iPhone省电技巧大全
内地经济稳健增长,香港GDP前三季度实现2.6%增幅
6死30万患病:三聚氰胺事件如何改变中国食安监管