洛谷B3869 进制转换

题目描述

N 进制数指的是逢 N 进一的计数制。例如,人们日常生活中大多使用十进制计数,而计算机底层则一般使用二进制。除此之外,八进制和十六进制在一些场合也是常用的计数制(十六进制中,一般使用字母 A 至 F 表示十至十五;本题中,十一进制到十五进制也是类似的)。

在本题中,我们将给出 个不同进制的数。你需要分别把它们转换成十进制数。

样例分析

输入 #1

2
8 1362
16 3F0

输出 #1

754
1008

输入第一行8和1362,意思是一个数在八进制下是1362,求它在十进制下是多少。我们用位权展开法,1\times8^{3}+3\times8^{2}+6\times8^{1}+2\times8^{0}=754,第二个同理,只不过中间一位为15,输入F。为3\times16^{2}+15\times16^{1}+0\times16^{0}=1008

解法分析

我们只要模拟上述的位权展开法即可。因为可能输入大写字母,所以用字符串存储。求出字符串的长度为s.size(),循环变量从0迭代到s.size()-1。因为我们从字符串末端迭代,所以要将字符串反向存储。我们可以用string库中的reverse(s.begin(),s.end())。

代码

#include //万能头文件
using namespace std;
string s;
int main(){
    int n,m;
    cin>>n; //输入数据的数量
    while(n--){
        cin>>m>>s;
        long long ans=0; //用int会爆
        reverse(s.begin(),s.end()); //reverse函数,用来反转字符串
        for(int i=0;i

如有不足,欢迎大家指正补充。

你可能感兴趣的:(洛谷,c++)