洛谷P1143 进制转换
1.洛谷P5707 【深基2.例12】上学迟到2.洛谷P5710 【深基3.例2】数的性质3.洛谷P1914 小书童——凯撒密码4.洛谷P1047 [NOIP2005 普及组]校门外的树5.洛谷P5728 【深基5.例5】旗鼓相当的对手6.洛谷P5721 【深基4.例6】数字直角三角形7.洛谷[NOIP2015 普及组] 金币8.洛谷[NOIP2011 普及组]数字反转9.洛谷P4956 [COCI2017-2018#6] Davor10.洛谷B3843 [GESP202306 三级]密码合规11.洛谷P1601 A+B Problem(高精度加法)12.洛谷P1614 爱与愁的心痛(滑动窗口解法)13.洛谷P2670 [NOIP2015 普及组] 扫雷游戏14.洛谷P1563 [NOIP2016 提高组] 玩具谜题15.洛谷B3849 [GESP样题 三级] 进制转换16.洛谷P1100 高低位交换
17.洛谷P1143 进制转换
18.[NOIP2008 提高组] 笨小猴(洛谷题号P1125)19.洛谷[NOIP2015 普及组] 金币20.洛谷P3383 【模板】线性筛素数21.洛谷P1029 [NOIP2001 普及组] 最大公约数和最小公倍数问题22.洛谷B3940 [GESP样题 四级] 填幻方23.洛谷P1042 [NOIP2003 普及组] 乒乓球24.洛谷P1067 [NOIP2009 普及组] 多项式输出25.洛谷P1098 [NOIP2007 提高组] 字符串的展开26.洛谷P1842 [USACO05NOV] 奶牛玩杂技27.洛谷P1223 排队接水28.洛谷P1209修理牛棚 Barn Repair29.洛谷P5250 【深基17.例5】木材仓库30.洛谷P1226 【模板】快速幂31.洛谷P1480 A/B Problem32.洛谷P1786 帮贡排序33.双指针习题:Kalindrome Array进制转换
洛谷题目链接:https://www.luogu.com.cn/problem/P1143#submit
题目描述
请你编一程序实现两种不同进制之间的数据转换。
输入格式
共三行,第一行是一个正整数,表示需要转换的数的进制 n(2<=n<=16),第二行是一个 n 进制数,若 n>10 则用大写字母 A-F 表示数码10-15 ,并且该 n 进制数对应的十进制的值不超过 10^9,第三行也是一个正整数,表示转换之后的数的进制m(2<=m<=16)。
输出格式
一个正整数,表示转换之后的 m 进制数。
样例 #1
样例输入 #1
16 FF 2
样例输出 #1
11111111
思路:
- 这题我们可以先将输入的进制的数字先转化为我们熟悉的10进制数字,再通过对十进制数字转化成我们需要的m进制。
- 如何将n进制的数字转化为10进制呢?我们都知道2进制如何转化为10进制,就是从2进制的最后一位开始,当前数字*20+当前数字*21+....一直这样下去,直到到达2进制数字的第一位结束。那么我们也可以对n进制的数字这样操作,只需要将2改为n即可,这个步骤的代码如下:
// r进制的数转化为10进制 int to_10(string s, int r) { int result = 0; int flag = 0; for (int i = s.size() - 1; i >= 0; i--) { int current; if (s[i] >= '0' && s[i] <= '9') { current = s[i] - '0'; } else { //如果这个位置不是数字表示的,就把它转化为数字表示 current = s[i] - 'A' + 10; } result += current * pow(r, flag++); } return result; }
- 然后,我们将我们熟悉的二进制的数字转化为m进制即可,如何转化为m进制呢?同样我们还是以二进制举例,我们知道,对十进制的数字一直对2取余的结果,最后再倒序输出,最后的结果就是二进制了,同样的我们将2改为m,就可以将十进制的数字改为m进制,这个阶段的代码如下:
//十进制数转化成R进制 string to_R(int n, int r) { string result; if (n == 0) return result; while (n) { //求余数 int remainder = n % r; if (remainder < 10) result = char(remainder + '0') + result; else result = char(remainder - 10 + 'A') + result; //更新n的值 n /= r; } return result; }
最后,整个程序的C++代码如下:
#include<iostream> using namespace std; #include<cmath> // r进制的数转化为10进制 int to_10(string s, int r) { int result = 0; int flag = 0; for (int i = s.size() - 1; i >= 0; i--) { int current; if (s[i] >= '0' && s[i] <= '9') { current = s[i] - '0'; } else { //如果这个位置不是数字表示的,就把它转化为数字表示 current = s[i] - 'A' + 10; } result += current * pow(r, flag++); } return result; } //十进制数转化成R进制 string to_R(int n, int r) { string result; if (n == 0) return result; while (n) { //求余数 int remainder = n % r; if (remainder < 10) result = char(remainder + '0') + result; else result = char(remainder - 10 + 'A') + result; //更新n的值 n /= r; } return result; } int main() { int n, m; string s; cin >> n >> s >> m; int result = to_10(s, n); string res=to_R(result, m); cout << res << endl; return 0; }
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战