进制转换

来源:互联网 发布:99乘法表java 编辑:程序博客网 时间:2024/05/24 07:35
Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u
Submit Status

Description

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

Input

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

Output

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

Sample Input

7 223 12-4 3
 

Sample Output

1111B-11
 
解题思路:
按照输入的数分类讨论是负数,正数还是零。
输出时要注意按倒叙输出并且判断输出的数是否大于9;
代码:
#include<stdio.h>
int main()
{  
  long long n; 
  int a[1000],b,r; 
  while(scanf("%lld%d",&n,&r)!=EOF) 
    {     
     if(n<0) 
     {
     n=-n;
     printf("-");
     }
     if(n == 0) 
     printf("0"); 
     int i=0;   
     while(n>0)    
      {      
        b=n%r;   
        a[i]=b;  
        n=n/r;  
        i++;  
     }        
     for(int j=i-1;j>=0;j--)  
           {  
                     if(a[j]==10) 
                     printf("A");
                     else if(a[j]==11) 
                     printf("B");   
                     else if(a[j]==12)
                    printf("C"); 
                    else if(a[j]==13) 
                    printf("D");       
                     else if(a[j]==14) 
                    printf("E");      
                    else if(a[j]==15)
                    printf("F");          
                     else printf("%d",a[j]);     
                    }       
                        printf("\n"); 
                    }    
    return 0;

0 0