小韦老师@神犇营-my0106-进制转换

本文介绍了一种将r进制数转换为十进制数的方法。通过码权积累和的方式,逐步计算出r进制数在十进制下的等效值。文章详细解释了算法的具体步骤,并提供了一个C++实现的示例。

小韦老师@神犇营-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 时:

  1. 取得当前 x 的最右边那一位数 t
  2. 将 t 乘以对应的权值累加到 num 中
  3. x 将刚刚处理过的数“划掉”
  4. 权值乘以 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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值