您的位置:首页 > 理论基础

题目1118:数制转换(2008年北京大学图形实验室计算机研究生机试真题)

2014-05-20 18:59 399 查看
题目1118:数制转换

时间限制:1 秒

内存限制:32 兆

特殊判题:否

提交:2438

解决:925

题目描述:

    求任意两个不同进制非负整数的转换(2进制~16进制),所给整数在long所能表达的范围之内。

    不同进制的表示符号为(0,1,...,9,a,b,...,f)或者(0,1,...,9,A,B,...,F)。

输入:

    输入只有一行,包含三个整数a,n,b。a表示其后的n 是a进制整数,b表示欲将a进制整数n转换成b进制整数。a,b是十进制整数,2 =< a,b <= 16。

    数据可能存在包含前导零的情况。

输出:

    可能有多组测试数据,对于每组数据,输出包含一行,该行有一个整数为转换后的b进制数。输出时字母符号全部用大写表示,即(0,1,...,9,A,B,...,F)。

样例输入:
15 Aab3 7


样例输出:
210306


提示:

可以用字符串表示不同进制的整数。

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Main{

/**
* @param args
*/
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);

while( scanner.hasNext() ){
int a = scanner.nextInt();
String n = scanner.next();
int b = scanner.nextInt();

long result = changeToTenSystem(n, a);
List<Long> list = changeToMSystem(result, b);

for (int i = 0; i < list.size(); i++) {
char c = mapIntToChar(list.get(i));
System.out.print(c);
}
System.out.println();

}
}

public static long changeToTenSystem(String s, int m){
char array[] = s.toCharArray();

int k = 1;
int result = 0;
for (int i = array.length-1; i >=0 ; i--) {
result += mapCharToLong(array[i])*k;
k = k*m;
}

return result;
}

public static long mapCharToLong(char c){
long result = -1;
if(c >= 'a' && c <= 'f'){
return (c-'a') + 10;
}else if( c >= 'A' && c <= 'F'){
return (c-'A') + 10;
}else{
return c - '0';
}
}

public static char mapIntToChar(Long n){
if(n >=0 && n <=9){
return (char)('0'+n);
}else{
return (char) ('A' + n - 10);
}
}
private static List<Long> changeToMSystem(long a, int m) {
List<Long> resultList = new ArrayList<Long>();

if(a == 0){
resultList.add(0L);
return resultList;
}

while(a != 0){
resultList.add(a%m);
a = a / m;
}
List<Long> list = new ArrayList<Long>();
for (int i = resultList.size()-1; i >=0; i--) {
list.add(resultList.get(i));
}

return list;
}

}

/**************************************************************
Problem: 1118
User: yihukurama
Language: Java
Result: Accepted
Time:360 ms
Memory:27964 kb
****************************************************************/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐