题目链接:点击打开链接
进制转换
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 49010 Accepted Submission(s): 26911
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
题目大意:把一个十进制 整数 转换为2~16进制 整数
解题思路:我做这个题目先前没考虑负数,使用辗转相除法 例如求10的二进制如下图 为 1010
//把10进制的数用2~16进制表示(注意负数)
import java.util.*;
class Main{
public static void main(String args[]){
Scanner sc=new Scanner(System.in);
while(sc.hasNext()){
int n=sc.nextInt();
int m=sc.nextInt();
int a[]=new int[33];
String b[]={"A","B","C","D","E","F"}; //大于等于10应该输出的字符
int x=n;
int y=m; //保护n和m的值,因为后面需要用到n和m的值
if(x<0){
x=-x; //如果是负数先令它变成正
}
if(y<0){
y=-y;
}
int count=0;
while(x!=0){ //当m等于0时跳出循环
a[count]=x%y;
count++;
x=x/y; //辗转相除法求m进制,得到的是一个顺序反过来的m进制数
}
for(int i=count-1;i>=0;i--){
if(i==count-1&&n*m<0){ //当m和n符号相反时先输出一个负号(且只在一个负号)
System.out.print("-");
}
if(i==0){
if(a[i]>=10){
System.out.println(b[a[i]-10]); //当大于等于10的数时用ABC..代替
}else{
System.out.println(a[i]);
}
}else{
if(a[i]>=10){
System.out.print(b[a[i]-10]);
}else{
System.out.print(a[i]);
}
}
}
}
}
}