杭电2031

进制转换

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


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

 

这道题比较简单,知道该如何把十进制转换成其他进制即可,也就是用阶除的方法,一个一个除。只需注意两点,一是把11-16转换成A-F,二是注意负数前面的符号即可。  代码如下:

#include <stdio.h>

int main(void)
{
	int i,n,r,count,sign;

	char a[50];

	while (scanf("%d %d",&n,&r)!=EOF)
	{
		sign=0;

		if(n<0) 
		{
			n=-n;
			sign=1;
		}

		count=0;

		for(i=0; n!=0; i++)
		{
			
			switch (n%r)
			{
			case 10:a[i]='A';break;
			case 11:a[i]='B';break;
			case 12:a[i]='C';break;
			case 13:a[i]='D';break;
			case 14:a[i]='E';break;
			case 15:a[i]='F';break;
			default :a[i]=n%r+'0';
			}
			
			n=n/r;

			count++;

		}

		if(sign!=1)
		{
		for(i=0; i<count; i++)
		{
	    	printf("%c",a[count-i-1]);
		}
		printf("\n");
		}

		else 
		{
						printf("-");
			for(i=0; i<count; i++)
		{
	    	printf("%c",a[count-i-1]);
		}
			printf("\n");
		}
	}

	return 0;
}


你可能感兴趣的:(杭电2031)