5122: 小何的旅行I
Time Limit: 1 Sec Memory Limit: 128 MB
Submit: 22 Solved: 12
[Submit][Status][Web Board]
Description
有一天小何来到一个陌生的星球上旅游,但这边的钱币上印有奇奇怪怪的符号和字母,小何看不懂,但他又想买东西(不吃东西要饿死的!),而你是在那个星球上唯一认识的人,于是就找来你帮他翻译下。
这个星球上不同的种族分别收不一样币种的钱币,而小何想买的东西也来自不同种族所开的店铺,因此他想知道,他手里的钱币换成另一种钱币它的币值将会变成多少。
那边的钱币不同的面额采用不同的进制,而且也没有阿拉伯数字,只有小写字母和符号表示,字母表示数字,而符号则表示它的币种(也就是代表是几进制的)。
例如种类为#的一个合法的币值为:#abc,#bfa。
Input
第一行仅包含一个整数T(1≤T≤100),代表有T组样例。
接下来的T行,每行包含一个币值和一个要求转换的目标币种。(数据保证没有前导0,也就是不存在类似#abc这种由a开头的币值,同时也不会有0元这种存在。保证币值的长度不超过70,目标币种仅为1个字符。)
提示: 数据范围较大,请使用long long类型代替int。
Output
输出目标币种的币值(不能出现前导0)。
Sample Input
3
#bac ^
$bahdgm #
^bab #
Sample Output
^bbaabb
#bfceaedg
#f
Code:
字符串处理的进制模拟
#include<cstdio>
#include<iostream>
#include<cmath>
#include<cstring>
#include<queue>
#include<stack>
#include<vector>
using namespace std;
typedef long long ll;
const int inf=0x3f3f3f3f;
int a[100005];
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
memset(a,0,sizeof(a));
string x;
char op;
cin>>x>>op;
int num;
if(x[0]=='#')
{
num=7;
}
else if(x[0]=='$')
{
num=17;
}
else if(x[0]=='^')
{
num=2;
}
ll sum=0;
for(int i=1; i<x.size(); i++)
{
sum=sum*num+(x[i]-'a');
}
if(op=='#')
{
num=7;
}
else if(op=='$')
{
num=17;
}
else if(op=='^')
{
num=2;
}
int cnt=0;
while(sum!=0)
{
a[cnt++]=sum%num;
sum/=num;
}
printf("%c",op);
for(int i=cnt-1;i>=0;i--)
{
printf("%c",a[i]+'a');
}
printf("\n");
}
return 0;
}