SHUoj 字符串进制转换
Posted ZefengYao
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SHUoj 字符串进制转换相关的知识,希望对你有一定的参考价值。
字符串进制转换
发布时间: 2017年7月9日 18:17 最后更新: 2017年7月9日 21:17 时间限制: 1000ms 内存限制: 128M
Claire Redfield在龙之谷游戏的一次任务中获得了一个上了锁的宝箱,上面刻了一串由小写字母构成的字符串A和一个数字m 。
经过Claire长时间研究,他发现密码是和a ,m 有关的。字符串A相当于一个26进制的数字,a 相当于0 ,b 相当于1 …….z 相当于25 。然后要将这个26进制的数转化成m 进制那就是这个宝箱的密码。
Claire觉得这个太简单了所以要你帮她完成。
多组输入,每组一行,输入一个字符串A 和一个正整数m 。
字符串长度<=10,2<=m<=9
。
每组输出一行答案,如题意。
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 字符串进制转换的主要内容,如果未能解决你的问题,请参考以下文章