SHU 414 - 字符串进制转换

时间:2023-12-19 08:08:07

题目链接:http://acmoj.shu.edu.cn/problem/414/

很咸鱼的网上拉了个进制转换模板过来,因为数组开的太小一直WA,后来一气之下MAXN开到1e5,真是蓝瘦……

后来实在觉得那样傻乎乎套模板真的很咸鱼,实在没有脸面贴出来

就自己重新理解了一遍模板,适当修改了之后再发出来(具体这个模板为什么是这样请看:http://www.cnblogs.com/dilthey/p/7141714.html):

 #include<cstdio>
#include<cstring>
#include<stack>
#define MAXN 20
using namespace std;
stack<int> ans;
int t[MAXN];
char OldData[MAXN];
int m;
void trans()
{
int i,len,k=;
len=strlen(OldData);
for(i=len-;i>=;i--) t[len--i] = OldData[i] - (OldData[i]<='' ? : (OldData[i]<'a' ? : ));
while(len)
{
for(i=len-;i>=;i--)
{
t[i-]+=t[i]%m*;
t[i]/=m;
}
ans.push(t[]%m);
t[]/=m;
while(len> && !t[len-]) len--;
} while(!ans.empty())
{
printf("%c",ans.top() + (ans.top()< ? '' : (ans.top()< ? : )));
ans.pop();
}
printf("\n");
}
int main()
{
while(scanf("%s",OldData)!=EOF)
{
scanf("%d",&m);
int len=strlen(OldData);
for(int i=;i<len;i++)
{
if(OldData[i]>='a' && OldData[i]<='j') OldData[i]=OldData[i]-'a'+'';
else OldData[i]=OldData[i]-'k'+'A';
}
trans();
}
}

因为这题数据比较水,所以用stack什么的完全不用担心超时,