题解:B3869 [GESP202309 四级] 进制转换
题目传送门
如何将
以下是 百度 的解释:
进制转换由一组数码符号和两个基本因素“基数”与“位权”构成。
基数是指,进位计数制中所采用的数码(数制中用来表示“量”的符号)的个数。
位权是指,进位制中每一固定位置对应的单位值。
二进制数第0位的权值是2的0次方,第1位的权值是2的1次方。
设有一个二进制数:
从右往左开始换算。
第
第
第
第
第
第
第
第
总和为
公式:第
以此类推
温馨提示:
- 输入数的时候请用
string。 - 如果某一位上是字母请先将其转换成对应的数字。
- 十年 OI 一场空,不开 long long 见祖宗!
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;
}