hdoj 2031进制转换 (递归与非递归)

 

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


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
 


#include<iostream>
#include<cstring>
#include<cstdio>
#include<map>
#include<set>
#include<cstdlib>
#include<stdio.h>
#include<cmath>
#include<string>
#include<algorithm>
using namespace std;
const char f[] = "0123456789ABCDEF";

void change2(int n, int r)
	{
		char b[10000];
		int cnt = 0;
		while(n){
			b[cnt++] = f[n%r];
			n /= r;
		}		
		while(cnt--){
			printf("%c",b[cnt]);
		}
	}


void change(int n, int r){
	if(n < r){
		if(n >= 10){
			printf("%c",n-10+'A');
		}
		else{
			printf("%d",n);
		}
	}
	else{
		change(n/r,r);
		if(n%r >= 10){
			printf("%c",n%r-10+'A');
		}
		else{
			printf("%d",n%r);
		}
	}
}


int main()
	{

		int n,r;
		while(scanf("%d%d",&n,&r) != EOF){
			if(n < 0){
				printf("-");
				n = -n;
			}
			change2(n,r);
			//change(n,r);
			printf("\n");
		}
		
		return 0;
	}

猜你喜欢

转载自blog.csdn.net/tianweidadada/article/details/80525543