杭电Oj刷题(2031)

进制转换

题目描述:

输入一个十进制数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<math.h>
int main() {
    int n,r;
    int z[10000];
    while (scanf("%d %d", &n,&r)!=EOF) {
	    int i=0,num,z[10000]; 	      //每输入两个数就要进行初始化 
        for(num=abs(n);num!=0;i++)    //取绝对值 
        {                             //将十进制数y转换为Q进制数z:采用“除基取余法” 
        	z[i]=num%r;
        	num=num/r;
		}
		i--;                      //将余数从后往前输出即为所求数的二进制数 
        if (n < 0)                //当输入的数是负数时,需要输出负号
            printf("-");
		for(; i >= 0; i--){       //如果R大于10,则对应的数字规则参考16进制(比如,10用A表示,等等)
    	    if(z[i]<10)
                printf("%d",z[i]);	
            else if(z[i]==10)
        	    printf("A");
            else if(z[i]==11)
        	    printf("B");
            else if(z[i]==12)
        	    printf("C");
            else if(z[i]==13)
             	printf("D");
            else if(z[i]==14)
        	    printf("E");
            else if(z[i]==15)
        	    printf("F");
	    }
	    printf("\n");           //换行 
    }
    return 0;
}
发布了55 篇原创文章 · 获赞 0 · 访问量 1008

猜你喜欢

转载自blog.csdn.net/ZhangShaoYan111/article/details/104156410