7.24日进制转换测试总结
比赛传送门
补充知识点:
\(1.\)
\(X\) 进制 \(\to\) 十进制
位值累加法
所有进制位的最小单位都是1
①写出所有位的位号
②基数的位号次方 \(\implies\) 位权
③十进制数字 \(=\) 位权 \(\times\) 该位上的数字之和
\(Code:\)
int to_ten(string op, int x)
{
int sum = 0;
int len = op.size();
for (int i = 0;i < len;++i)
{
if (op[i] >= '0' and op[i] <= '9')
{
sum = sum * x + (op[i] - '0');
}
if (op[i] >= 'A' and op[i] <= 'Z')
{
sum = sum * x + (op[i] - 'A' + 10);
}
}
return sum;
}
直接写成函数,需要的时直接调用 \(\Uparrow\)
\(2.\)
十进制 \(\to\) \(X\) 进制
①每次除基数,得到商 (下一次的被除数) ,余数就是当前的最低位的数值
②继续被除数除基数
③最后的ans就是所有的余数反过来
\(Code:\)
string to_x(int a, int x)
{
while (a)
{
string s = "";
if (a % x < 10)
{
s = char('0' + a % x) + s;
}
else if (a % x >= 10)
{
s = char('A' + a % x - 10) + s;
}
a /= s;
}
return s;
}
直接写成函数,需要的时直接调用 \(\Uparrow\)
Q1: B3620 x 进制转 10 进制
题目传送门 提交记录传送门
使用位值累加法,具体方法看下面 \(\Downarrow\)
所有进制位的最小单位都是1
①写出所有位的位号
②基数的位号次方 \(\implies\) 位权
③十进制数字 \(=\) 位权 \(\times\) 该位上的数字之和
本题目一次过
\(Code:\)
#include <bits/stdc++.h>
using namespace std;
int to_ten(int n, string op)
{
int j = 0;
int len = op.size();
for (int i = 0;i < len;++i)
{
if (op[i] >= '0' and op[i] <= '9')
{
j = n * j + int(op[i] - '0');
}
else
{
j = n * j + int(op[i] - 'A' + 10);
}
}
return j;
}
int main()
{
int x;
string s;
cin >> x >> s;
cout << to_ten(x, s);
return 0;
}