Code[VS] 2112 进制转换

来源:互联网 发布:机械零件加工制作软件 编辑:程序博客网 时间:2024/06/11 17:49

转载请注明出处:http://blog.csdn.net/u013598409

【题意】

给出一个 P 进制整数 N,求 N 的 Q 进制表示。
其中 0<= N <= 32767 , 2 <= P <= 16, 2 <= Q <= 16。大于 9 的数字用 A、B、C、D、E、F 表示。

【分析】
直接字符串读入,然后存到stack进行P进制转10进制。
注意C++党不能用字符读入,不然无良的LINUX会让你WA掉的。
然后在10进制转Q进制就行了,注意ABCDEF的问题,就是转化为字符输出就行了。
还有一点,就是对于0要特判一下,如果为0直接输出,这是一大坑点。

【实现】
#include <cstdio>
#include <cstring>
#include <cstdlib>


using namespace std;


int stk[40],mtp;
int p,q,n;


int main(void)
{
char s[40]; int len;
scanf("%d%d%s",&p,&q,s);
len=strlen(s);
for (int i=0;i<len;i++) 
stk[++stk[0]]=('A'<=s[i]&&s[i]<='F'?s[i]-55:s[i]-'0');
if (stk[0]==1&&!stk[1])
{
printf("0\n");
return 0;
}

for (int i=stk[0],mtp=1;i;i--,mtp*=p) n+=stk[i]*mtp;

memset(stk,0,sizeof stk);
for (int i=n;i;i/=q) stk[++stk[0]]=i%q;
for (int i=stk[0];i;i--) printf("%c",0<=stk[i]&&stk[i]<=9?stk[i]+'0':stk[i]+55);
printf("\n");

return 0;
}

【小结】进制转换:注意0的特殊性
0 0
原创粉丝点击