SHUoj 字符串进制转换

Posted ZefengYao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SHUoj 字符串进制转换相关的知识,希望对你有一定的参考价值。

                                       字符串进制转换

发布时间: 2017年7月9日 18:17   最后更新: 2017年7月9日 21:17   时间限制: 1000ms   内存限制: 128M

Claire Redfield在龙之谷游戏的一次任务中获得了一个上了锁的宝箱,上面刻了一串由小写字母构成的字符串A和一个数字

经过Claire长时间研究,他发现密码是和 有关的。字符串A相当于一个26进制的数字, 相当于 相当于 ……. 相当于25  。然后要将这个26进制的数转化成 进制那就是这个宝箱的密码。

Claire觉得这个太简单了所以要你帮她完成。

多组输入,每组一行,输入一个字符串 和一个正整数
字符串长度<=102<=m<=

每组输出一行答案,如题意。


b 2
1

思路:进制转换,不过要注意特判0时候的情况
AC代码:
#define _CRT_SECURE_NO_DEPRECATE
#include<iostream>
#include<algorithm>
#include<queue>
#include<set>
#include<vector>
#include<cstring>
#include<string>
using namespace std;
typedef long long ll;
vector<int>vec;
string s;
int m;
ll change(string s, int base) {
    ll num = 0;
    for (int i = 0; i < s.size(); i++) {
        num = num*base + s[i] - a;
    }
    return num;
}

void transalte(ll sum, int m) {
    while (sum) {
        vec.push_back(sum%m);
        sum /= m;
    }
}

int main() {
    while (cin >> s >> m) {
        vec.clear();
        ll sum = change(s, 26);
        if (!sum) { cout << "0" << endl; continue; }
        transalte(sum, m);
        reverse(vec.begin(), vec.end());
        for (vector<int>::iterator it = vec.begin(); it != vec.end(); it++) {
            if ((it + 1) != vec.end())cout << *it;
            else cout << *it << endl;
        }
    }
    return 0;
}

 

以上是关于SHUoj 字符串进制转换的主要内容,如果未能解决你的问题,请参考以下文章

shuoj 418 丢史蒂芬妮(素数筛+sg函数)

go语言怎么将二进制转为字符串

SHUOJ417解题报告

Silverlight 中的十进制转换器无法正确处理丢失焦点

SHUoj 神无月排位赛

shuoj1936-D序列—最长上升子序列