题解:B3869 [GESP202309 四级] 进制转换

· · 题解

题目传送门

如何将 n 进制转为十进制?

以下是 百度 的解释:

 进制转换由一组数码符号和两个基本因素“基数”与“位权”构成。

 基数是指,进位计数制中所采用的数码(数制中用来表示“量”的符号)的个数。

 位权是指,进位制中每一固定位置对应的单位值。

二进制数第0位的权值是2的0次方,第1位的权值是2的1次方。

设有一个二进制数:0110 0100,转换为 10 进制为:

从右往左开始换算。

00 \times 2 ^ {0} = 0

10 \times 2 ^ {1} = 0

21 \times 2 ^ {2} = 4

30 \times 2 ^ {3} = 0

40 \times 2 ^ {4} = 0

51 \times 2 ^ {5} = 32

61 \times 2 ^ {6} = 64

70 \times 2 ^ {7} = 0

总和为 4 + 32 + 64 = 100

公式:第 d 位是 2 ^ {d}

以此类推 K 进制数的第 d 位需要去乘 K ^ {d}

温馨提示:

code

#include<bits/stdc++.h>
using namespace std;
long long n,r;
string k;
void fun(int m,string s){
    long long d=1,sum=0;//一定用 long long
    for(int i=s.size()-1;i>=0;i--){//从后往前(从右往左)
        if(s[i]<='9'&&s[i]>='0') sum+=d*(s[i]-'0');
        else sum+=d*(s[i]-'A'+10);//把字母转换成对应的数字
        d*=r;//计算权值
    }
    cout<<sum<<endl;
}
int main(){
    cin>>n;
    while(n--){ //可以写成 for(long long  i=1;i<=n;i++)
        cin>>r>>k;
        fun(r,k);
    }
    return 0;
}