hdoj 2031 进制转换

进制转换

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


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<stdio.h>

#include<string.h>

int main()

{

	int n,m,j,i,s,y,l2;

	char b[100];

	while(scanf("%d %d",&n,&m)!=EOF)

	{

		y=0;l2=0;j=1;

		s=0;

		while(n!=0)

		{

			if(n<0)   //考虑n为负数的情况 

			{

				s=n;

				n=-n;

			}

			 y=n%m;   //求每次短除m后的余数 

			 n=n/m;      //求每次短除m后的商 

			 if(y>=10)

			 {

			 	l2=j;  //记录字符串长度 

			 	b[j]=y+55;//将数字转换为字符 

			 	j++;

			 }

			 else

			 {

			 	 l2=j;

			     b[j]=y+48;

			     j++;

			 }

		}

		if(s<0)

			printf("-");

		for(i=l2;i>=1;i--)

		{			

		    printf("%c",b[i]);

		}

		printf("\n");

	}

	return 0;

} 

  

你可能感兴趣的:(进制转换)