您的位置:首页 > 其它

(HDOJ2031)进制转换

2013-04-09 23:00 267 查看
Problem Description

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

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

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

[align=left]Sample Input[/align]

7 2
23 12
-4 3

[align=left]Sample Output[/align]

111
1B
-11

#include <stdio.h>
#include <math.h>
#include <string.h>
#include <ctype.h>

int a[1000];

int absplus(int n)
{  return n>0?n:(-n); }

void print(int a[],int n)
{
int i;
for(i=n; i>=0; i--)
{
if(a[i]<10)
{
printf("%d",a[i]);
}
else
{
switch(a[i]%10)
{
case 0:printf("A");break;
case 1:printf("B");break;
case 2:printf("C");break;
case 3:printf("D");break;
case 4:printf("E");break;
case 5:printf("F");break;
}
}
}
}

void convert(int n, int R)
{
int i=0,p,j;
int t;
t=n;
n=absplus(n);
a[0]=n%R;
p=n/R;
while(p>=R)
{
a[++i]=p%R;
p=p/R;
}
a[++i]=p;
if(t>0)
{
print(a,i);
}
else
{
printf("-");
print(a,i);
}
printf("\n");

}

int main()
{
int N,R;
while(scanf("%d%d",&N,&R)!=EOF)
{
if((N==1) || (N==0))
printf("%d\n",N);
else
convert(N,R);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: