HDU 2031 进制转换(超级简单——递归即可)

									进制转换

Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 85049 Accepted Submission(s): 45962

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

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

Output
为每个测试实例输出转换后的数,每个输出占一行。如果R大于10,则对应的数字规则参考16进制(比如,10用A表示,等等)。

Sample Input
7 2
23 12
-4 3

Sample Output
111
1B
-11
该题真的很简单!我看到很多人做起啦很麻烦啊!我实在搞不懂
明显的是栈的思想啊,十进制转化为其他进制就是对其求余呀!

7转化为2进制,不断对2求余直到为0,
23转化为12进制,对12求余即可

问题是 不是一求出余数立马打印的,最先求出的余数最后打印
这不就栈的先进后出后进先出的思想吗?
我直接递归不就好啦!
干嘛有的人还数组,还链表的,啥子情况吗?哎

#include<iostream>
using namespace std;
void digui(int n,int r)
{
	if(n==0)
		return ;//递归跳出条件
	int sum=n%r;
	n=n/r;
	digui(n,r);
	if(sum>=10)
	{
		switch(sum)
		{
			case 10:cout<<'A';break;
			case 11:cout<<'B';break;
			case 12:cout<<'C';break;
			case 13:cout<<'D';break;
			case 14:cout<<'E';break;
			case 15:cout<<'F';break;
			default:break;
		}
	}
	else
		cout<<sum;
}	
int main()
{
	int n,r;
	while(cin>>n>>r)
	{
		if(n<0)//判断正负
		{
			cout<<'-';
			digui(-n,r);
		}
		else
			digui(n,r);
		cout<<endl;
	}
	return 0;
}

是不是So easy!!!

©️2020 CSDN 皮肤主题: 岁月 设计师:pinMode 返回首页