栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

进制转换(C++实现)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

进制转换(C++实现)

写在前面

小学期作业中碰到一题进制转换,自己写的过程很是坎坷。

想到没有系统学习过进制转换的知识,于是搜索资料进行一个查漏补缺,本文仅作为学习记录。


参考资料

[C++]手把手编程实现进制转换_哔哩哔哩_bilibili 模版学习自咸鱼君

http://t.csdn.cn/RXk7C 感谢学长支撑我的小学期(

http://t.csdn.cn/iRV3m 开篇的例子很棒!


本文知识点
  1. 任意进制到十进制,十进制到任意进制的转换

  2. 十进制到任意进制时使用栈进行存储和输出

  3. 输出时使用的字符转换写法


模版:不同进制之间的数据转换

问题描述:

请你编一程序实现两种不同进制之间的数据转换。

输入格式:

共三行,第一行是一个正整数,表示需要转换的数的进制(110则使用大写字母A-F表示数码10-15,并且该n进制对应的十进制的值不超过10e9,第三行也是一个正整数,表示转换之后的数的进制(1

输出格式:

一个正整数,表示转换之后的m进制数。

样例输入

 16
 FF
 2

样例输出

 11111111

AC代码
 #include//万能头
 //进制转换
 using namespace std;
 ​
 int main() 
 {
     string num; //需要转换的n进制数,用字符数组char num[maxn]也是一样的
     int n, m, ten = 0; //ten为转换成的十进制数
     cin >> n >> num >> m;
 ​
     //1、n进制转换为十进制
     int len = num.size(); //获取num长度
     for (int i = len-1, k = 0; i >= 0; i--, k++) //从右至左倒序,k为n的k次方(同二进制)
     {   
         int tmp;
         if (num[i] >= 'A' && num[i] <= 'F') //如果n大于10
             tmp = num[i] - 'A' + 10;
         else
             tmp = num[i] - '0'; //使用ascii码实现字符->数字的转换
 ​
         ten += tmp * pow(n, k); //累加
     }
 ​
     //2、十进制转换为m进制,在这里我们使用栈进行存储
     stack stk;
     while(ten)
     {   
         int u = ten % m;
         ten /= m;
         char tmp;
 ​
         if (u < 10)
             tmp = u +'0';
         else
             tmp = u + 'A' - 10;
         
         stk.push(tmp); //入栈
     }
 ​
     //3、输出答案
     while(stk.size())//逆序输出
     {
         cout << stk.top();
         stk.pop();
     }
     cout << endl;
     return 0;
 ​
 }

例题:小A的计算器

问题描述:

以往的操作系统内部的数据表示都是二进制方式,小A新写了一个操作系统,系统内部的数据表示为26进制,其中0-25分别由a-z表示。

现在小A要在这个操作系统上实现一个计算器,这个计算器要能实现26进制数的加法运算。

你能帮小A实现这个计算器吗?

输入格式:

输入的第一行包括一个整数N(1<=N<=100)。

接下来的N行每行包括两个26进制数x和y,它们之间用空格隔开,每个数的位数最多为10位,我们可以保证相加的结果的位数最多也是10位。

每个数会用小A所设计的操作系统中的表示方法来表示,如:bsadfasdf。

即每个数的各个位均由26个小写字母a-z中的一个来表示。

输出格式:

输出x和y相加后的结果,结果也要用题目中描述的26进制数来表示。

样例输入

 4
 ba cd
 c b
 b c
 ba c

样例输出

 dd
 d
 d
 bc

AC代码
#include
 //小A的计算器:进制转换
 using namespace std;
 ​
 int main() 
 {
     int n;
     string x, y; //字符形式存储两个6进制数
     cin >> n;
 ​
     while(n--)
     {
         cin >> x >> y;
         int lenx = x.size();
         int leny = y.size();
         int a = 0, b = 0; //转换成的十进制数
         int sum; //转换成十进制后的总和
 ​
         //1、26进制转换到十进制
         for (int i = lenx - 1, k = 0; i >= 0; i--, k++)
             a += (x[i] - 'a') * pow(26, k);
         for (int i = leny - 1, k = 0; i >= 0; i--, k++)
             b += (y[i] - 'a') * pow(26, k);
         sum = a + b;
         //cout << sum << endl; //检查一下26进制转到10进制有没有问题
 ​
         //2、十进制的sum转换到26进制并输出(栈)
         stack stk;
         while(sum)
         {   
             int u = sum % 26;
             sum /= 26;
             stk.push(u + 'a'); //入栈
         }
 ​
         //3、输出答案
         while(stk.size())//逆序输出
         {
             cout << stk.top();
             stk.pop();
         }
         cout << endl;
         }
     return 0;
 }

写在最后

如果你能看到这里,很感谢啦!

这里是yubisco7的CSDN博客,他在这里记录自己的计算机学习过程。

欢迎交流、提出建议或指正错误,希望我们能够共同进步。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1008771.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号