首页 > ACM题库 > 九度OJ > 九度-1118-数制转换[解题代码]
2013
12-12

九度-1118-数制转换[解题代码]

题目来源:2008年北京大学图形实验室计算机研究生机试真题

题目描述:

    求任意两个不同进制非负整数的转换(2进制~16进制),所给整数在long所能表达的范围之内。
    不同进制的表示符号为(0,1,…,9,a,b,…,f)或者(0,1,…,9,A,B,…,F)。

输入:

    输入只有一行,包含三个整数a,n,b。a表示其后的n 是a进制整数,b表示欲将a进制整数n转换成b进制整数。a,b是十进制整数,2 =< a,b <= 16。

    数据可能存在包含前导零的情况。

输出:

    可能有多组测试数据,对于每组数据,输出包含一行,该行有一个整数为转换后的b进制数。输出时字母符号全部用大写表示,即(0,1,…,9,A,B,…,F)。

样例输入:
15 Aab3 7
样例输出:
210306
提示:

可以用字符串表示不同进制的整数。


cpp 代码如下:
#include <stdio.h>
char str[100];
int a,b;
int num,tmp,i;
int main() {
	while(scanf("%d%s %d", &a, str, &b) != EOF){
		num = 0;
		for(i=0; str[i]; i++){
			if(str[i] >= 'a') str[i] -= 32;
			tmp = (str[i] >= 'A' ? str[i]-'A'+10:str[i]-'0');
			//tmp = str[i]
			num = num * a + tmp;
		}
		int cnt=0;
		if(num == 0)
		{puts("0"); continue;}
		while(num){
			if(num%b <=9)
				str[cnt++] = num%b+'0';
			else
				str[cnt++] = num%b-10+'A';
			num = num/b;
		}
		for(i=cnt-1; i>=0; i--)
			printf("%c",str[i]);
		puts("");
	}
	return 0;
}
/**************************************************************
	Problem: 1118
	User: coder
	Language: C
	Result: Accepted
	Time:10 ms
	Memory:912 kb
****************************************************************/


  1. 站长好。我是一个准备创业的互联网小白,我们打算做一个有关国*际*游*学的平台。手上也有了一些境外资源。现阶段的团队现在没有cto.原意出让一些管理股寻找一个靠谱的技术专家做合伙人, 不知道是不是能得到您的帮助。发个帖子或者其他方式。期待您的回应。可以加我微信tianxielemon聊聊。

  2. 我还有个问题想请教一下,就是感觉对于新手来说,递归理解起来有些困难,不知有没有什么好的方法或者什么好的建议?

  3. 可以参考算法导论中的时间戳。就是结束访问时间,最后结束的顶点肯定是入度为0的顶点,因为DFS要回溯