首页 > 专题系列 > C基础练习 > C语言程序设计-数制转换[函数应用]
2013
11-19

C语言程序设计-数制转换[函数应用]

10056 数制转换(选做题)

【问题描述】求任意两个不同进制非负整数的转换(2进制~16进制),所给整数在long所能表达的范围之内。不同进制的表示符号为(0,1,….,9,A,B,C,D,E,F)。

注意:不同进制可能不能直接转换,如八进制与十六进制。可以考虑不同进制与十进制的转换,即借助于十进制实现任意两个不同进制的转换。

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

【输出形式】输出包含一行,为转换后的b进制整数。输出时字符号全部用大写表示,即(0 ,1,…,9,A,B,C,D,E,F)。

【样例输入】15 AAB3 7

【样例输出】210306

【样例说明】15进制的数AAB3,转换为7进制后的数为210306。

【评分标准】本题共4个测试点,每个测试点0.25分,总分1.0分。

#include <stdio.h>
#include <string.h>
int a,b;
char num[10000];
int getN(char c){
	if(c >= '0' && c <= '9') return c-'0';
	else return 10+ (c-'A');
}
int getD(char num[100]){
	int pow = 1;
	int d = 0;
		for(int i=strlen(num)-1; i>=0; i--){
			d += getN(num[i]) * pow;
			pow *= a;
		}
		return d;
}
int main() {
	scanf("%d %s %d", &a, num, &b);
	int d = getD(num);
	int ans[10000];
	int i = 0;
	while(d){
		ans[i++] = d % b;
		d /= b;
	}
	for(i--; i>=0; i--){
		if(ans[i] < 10) printf("%d",ans[i]);
		else printf("%c", ans[i]-10+'A');
	}
	return 0;
}

 


  1. 很高兴你会喜欢这个网站。目前还没有一个开发团队,网站是我一个人在维护,都是用的开源系统,也没有太多需要开发的部分,主要是内容整理。非常感谢你的关注。

  2. 第二种想法,我想来好久,为啥需要一个newhead,发现是把最后一个节点一直返回到嘴上面这层函数。厉害,这道题之前没样子想过。