0%

小小总结一下C/C++的进制转换

首先说要求

题目要求输入一个字符串,只有数字和大写字母,然后需要转换成十进制的没,需要判定的是基数和偶数,然后默认的进制需要自己设计,ok下面开始简答分析。

进制转换的说明

其实进制转换也就是乘以基数的多少次方,然后相加即可。下面直接上代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int StrtoBool(string &str, int r)
{
int ans = 0;
// 进制转换
for(int i = 0; i != str.size(); i ++)
{
ans *= r;
if(str[i] >= '0' && str[i] <= '9')
ans += str[i] - '0';
else if(str[i] >= 'A' && str[i] <= 'Z')
ans += str[i] - 'A' + 10;
}

return ans % 2; //结果是只看奇数和偶数的
}

十进制转换为任意进制

一般算法是除以基数,然后倒着取数,显然是栈的结构,先入后出。下面直给出完整版的代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include<iostream>
#include<stack>
using namespace std;

int main()
{
int n = 0, r = 10;
stack<char> s; //全部存大写字母
cin >> n >> r; //数字和进制(都是int类型的)

while(n)
{
char tmp ;
tmp = n%r;

if(tmp >= 0 && tmp <= 9)
tmp += 48; // 得到字符的0-9
else
tmp += 55; // 得到大写的数字(暂时没有处理Z以后的)
s.push(tmp);
n /= r;
}
for(;!s.empty();)
{
cout << s.top();
s.pop();
}
return 0;
}
-------------本文结束感谢您的阅读-------------