HDU 2031 进制转换

来源:互联网 发布:一战沙俄 知乎 编辑:程序博客网 时间:2024/06/07 02:17

http://acm.hdu.edu.cn/showproblem.php?pid=2031

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

解题思路:
1.进制转换参考二进制与十进制之间的转换,即相除法。
2.因为是倒着出结果的,所以先将除下来的每个余数放进数组里,然后从n-1到0输出。
3.9以上的数字在输出时判断一下,如果为10输出A,如果为11输出B。以此类推。
4.负数的问题:我是用了一个tag,原来tag=0,如果为负数,n=-n,并且tag=1,然后先判断tag是否为1,为1的话先输出一个负号。

代码:

#include<stdio.h>#define M 10int main(){    int N,R,a[M],i,j,tag;    while(scanf("%d %d",&N,&R)!=EOF)    {        tag=0;        i=0;        if(N<0)        {            N=-N;            tag=1;        }        while(N)        {            a[i++]=N%R;            N=N/R;        }        if(tag==1)   printf("-");        for(j=i-1;j>=0;j--)        {            if(a[j]<10)   printf("%d",a[j]);            if(a[j]==10)  printf("A");            if(a[j]==11)  printf("B");            if(a[j]==12)  printf("C");            if(a[j]==13)  printf("D");            if(a[j]==14)  printf("E");            if(a[j]==15)  printf("F");        }         printf("\n");    }return 0;}
0 0
原创粉丝点击