hdoj 2031 进制转换

时间:2023-03-08 17:05:59

进制转换

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;
}