小韦老师@神犇营-my0106-进制转换
题目:
描述
将一个 r (2 ≤ r ≤ 9)进制的数 x (0 ≤ x ≤ 100000000)转成十进制。
本题所有的数据均小于等于 10 ^18。
输入
输入仅一行,为 r 和 x,两个数字用空格隔开。
输出
输出仅一行,为对应的十进制数。
输入样例1
2 110
输出样例1
6
思路:
整体思路:
用码权积累和来完成。
具体步骤:
1.定义两个变量 r 和 x,用来表示 r 进制的 x,并且输入 r 和 x。
2.定义一个变量 num,用来存储对应的十进制数,并初始化为 0。
3.定义一个变量 p,用来存储权值,并初始化为 1。
4.当 x 不等于 0 时:
- 取得当前 x 的最右边那一位数 t
- 将 t 乘以对应的权值累加到 num 中
- x 将刚刚处理过的数“划掉”
- 权值乘以 r
while (x != 0) { // 当 x 不等于 0 时
int t = x % 10; // 求得当前 x 的最右边那位
num += t * p; // 将码权积累加到 num 中
x /= 10; // 将处理过的位数“划掉”
p *= r; // 将权值乘以 r
}
5.输出对应的十进制数 num。
完整代码:
#include <bits/stdc++.h>
using namespace std;
int main() {
int r, x; // r 进制的数 x
cin >> r >> x;
int num = 0; // 用来存储对应的十进制数
int p = 1; // 用来存储权值,初始化为 1
while (x != 0) { // 当 x 不等于 0 时
int t = x % 10; // 求得当前 x 的最右边那位
num += t * p; // 将码权积累加到 num 中
x /= 10; // 将处理过的位数“划掉”
p *= r; // 将权值乘以 r
}
// 输出对应的十进制数
cout << num;
return 0;
}