网上看到好多十进制转n进制的,很少有n进制转十进制的,今天来分享一种我的解法,欢迎大家交流批评。先上一段十二进制转十进制的代码,n进制转十进制也一样。
import java.util.Scanner;
public class n进制转10进制 {
static int N=12;//进制
public static void main(String args[]) {
//将十二进制的2B转为10进制
System.out.println(transfrom("2B"));
}
static int transfrom(String str){
char[] arr = str.toCharArray();
int sum=0;
for(int i=0;i<arr.length;i++){
sum=(int) (help(arr[i])*Math.pow(N, arr.length-i-1))+sum;
}
return sum;
}
//辅助方法,主要是将A,B,C字符转数字,这是十进制的数字
static int help(char c){
if(c=='0')
return 0;
if(c=='1')
return 1;
if(c=='2')
return 2;
if(c=='3')
return 3;
if(c=='4')
return 4;
if(c=='5')
return 5;
if(c=='6')
return 6;
if(c=='7')
return 7;
if(c=='7')
return 8;
if(c=='9')
return 9;
if(c=='A')
return 10;
if(c=='B')
return 11;
return -1;
}
}
看完发现思路很简单但,就是将n进制每一位字符转为十进制数字,然后求和即可。下面来一道练习题。
猪八戒网2017校园招聘 移动开发工程师 在线考试
编程题 | 20分 1/1
龟兔赛跑
时间限制:C/C++语言 1000MS;其他语言 3000MS
内存限制:C/C++语言 65536KB;其他语言 589824KB
题目描述:
小A和小B正就龟兔赛跑的问题进行辩论。小A说,兔子永远追不上乌龟,因为如果龟兔一开始相距10米(兔子在乌龟后面),那么当兔子跑了10米的时候,乌龟又会向前走了1米;当兔子再跑一米的时候,乌龟又向前走了0.1米……这样乌龟和兔子之间总会存在一段距离,不管多小。
小A知道小B的数学不好,所以加上赌注说如果一方无法反驳,就要满足另一方一个要求。为了难倒小B,小A采用了12进制作为输入!为此,小B请聪明的你帮忙解决问题。
小B认为,如果已知了乌龟、兔子的速度以及最初相距的距离,那么只要知道了兔子赶上乌龟的第一个整数秒,就可以驳倒小A了,你怎么看?
输入
输入数据第一行为一个10进制整数T(T<=100),表示有T组测试数据。每组输入数据包含三行,每行为一个12进制整数,为vt, vg, d,分别代表兔子的速度(m/s),乌龟的速度(m/s),在第0秒的龟兔之间的距离(m),输入数据保证0<vg<vt<=BBBB,0<d<=BBBBBBBB,且每个整数合法(没有前缀0)。
输出
输出数据采用10进制整数,代表最小的整数秒t,使得在t秒时兔子追上了乌龟。
样例输入
2
5
2
9
10
A
1B
样例输出
3
12
题解如下:其中主要考察的就是十二进制转十进制。
package zbj;
import java.util.Scanner;
public class Main {
public static void main(String args[]) {
Scanner reader = new Scanner(System.in);
int n = reader.nextInt();
//在读数字后面紧接着读字符串,一点要处理数字后面的回车,切记,切记,切记啊
reader.nextLine();
for(int i=n;i>0;i--){
String vt = reader.nextLine();
String vg = reader.nextLine();
String d = reader.nextLine();
int t=trans(vt);
int g=trans(vg);
int dd=trans(d);
int T=dd/(t-g);
//余数的问题没考虑到
if(dd%(t-g)!=0)
T=T+1;
System.out.println(T);
}
}
static int trans(String str){
char[] arr = str.toCharArray();
int sum=0;
for(int i=0;i<arr.length;i++){
sum=(int) (help(arr[i])*Math.pow(12, arr.length-i-1))+sum;
}
return sum;
}
static int help(char c){
if(c=='0')
return 0;
if(c=='1')
return 1;
if(c=='2')
return 2;
if(c=='3')
return 3;
if(c=='4')
return 4;
if(c=='5')
return 5;
if(c=='6')
return 6;
if(c=='7')
return 7;
if(c=='7')
return 8;
if(c=='9')
return 9;
if(c=='A')
return 10;
if(c=='B')
return 11;
return 0;
}
}