字符串进制转换(进制转换 金马五校赛-上海大学)
字符串进制转换
发布时间: 2017年7月8日 21:13 最后更新: 2017年7月8日 22:31 时间限制: 1000ms 内存限制: 128M
<label class="problem-label" style="display:inline-block;font-weight:700;font-size:16px;">描述</label>
Claire Redfield在龙之谷游戏的一次任务中获得了一个上了锁的宝箱,上面刻了一串由小写字母构成的字符串A和一个数字m。
经过Claire长时间研究,他发现密码是和a,m有关的。字符串A相当于一个26进制的数字,a相当于0,b相当于1…….z相当于25。然后要将这个26进制的数转化成m进制那就是这个宝箱的密码。
Claire觉得这个太简单了所以要你帮她完成。
<label class="problem-label" style="display:inline-block;font-weight:700;font-size:16px;">输入</label>
多组输入,每组一行,输入一个字符串A和一个正整数m。
字符串长度<=10,2<=m<=9。
<label class="problem-label" style="display:inline-block;font-weight:700;font-size:16px;">输出</label>
每组输出一行答案,如题意。
<label class="problem-label" style="display:inline-block;font-weight:700;font-size:16px;">样例输入1</label> 复制
b 2
<label class="problem-label" style="display:inline-block;font-weight:700;font-size:16px;">样例输出1</label>
1
26进制先转换成10进制 再转换成2进制 longlong没有爆也是妙
#include <iostream>
#include <algorithm>
#include <math.h>
#include <string.h>
#include <stdlib.h>
#include <vector>
using namespace std;
const int maxn = 15;
char r[maxn];
int main(){
int m;
long long temp;
vector<int> a;
while(~scanf("%s%d",r,&m)){
a.clear();
temp = 0;
for(int i=0;i<strlen(r);i++){
temp = temp*26+(r[i]-'a');
}
if(temp==0){
cout<<0<<endl;
}else{
while(temp!=0){
a.push_back(temp%m);
temp/=m;
}
vector<int>::iterator it;
for(it=a.end()-1;it>=a.begin();it--)
cout<<*it;
cout<<endl;
}
memset(r, 0, sizeof(r));
}
return 0;
}