首页 > ACM题库 > HDU-杭电 > hdu 2031 进制转换-递归和分治-[解题报告]C++
2013
12-26

hdu 2031 进制转换-递归和分治-[解题报告]C++

进制转换

问题描述 :

输入一个十进制数N,将它转换成R进制数输出。

输入:

输入数据包含多个测试实例,每个测试实例包含两个整数N(32位整数)和R(2<=R<=16, R<>10)。

输出:

输入数据包含多个测试实例,每个测试实例包含两个整数N(32位整数)和R(2<=R<=16, R<>10)。

样例输入:

7 2
23 12
-4 3

样例输出:

111
1B
-11

http://acm.hdu.edu.cn/showproblem.php?pid=2031

虽然我写过去了,但是有一种自己写的特别不规范,特别Shi的赶脚。。

#include <iostream>
using namespace std;

void transform(int r,int n){
	if (n==0)
		return ;
	int b,c;
	b=n/r;
	c=n%r;
	transform(r,b);
	if (c>=10)
		printf("%c",c+55);
	else printf("%d",c);
}	

int main(){
	int n,m;
	while (scanf("%d%d",&n,&m)!=EOF){
		if (n==0)
			printf("0");
		else if (n<0){
			printf("-");
			transform(m,-n);
		}
		else transform(m,n);
		putchar(10);
	}
	return 0;
}

解题转自:http://blog.csdn.net/operator456/article/details/8522261


  1. 第二个方法挺不错。NewHead代表新的头节点,通过递归找到最后一个节点之后,就把这个节点赋给NewHead,然后一直返回返回,中途这个值是没有变化的,一边返回一边把相应的指针方向颠倒,最后结束时返回新的头节点到主函数。