java实现任意进制转化

第一行是两个整数A,B,第二行是一个A进制的字符串,然后将字符串转为B进制数(16进制以内)
注意:第二行输入的是字符串,这是个坑
之所以是字符串是因为10进制以上的会存在字母
就比如16 进制的a就是10
思路:1、先将任意进制转为十进制
2、将十进制转为任意进制

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

public class Main {
	//先将A进制字符串转化为十进制
	public int changeDecimal(int valueA, String number) {
		List list = new ArrayList();
		for(int i=0;i<10;i++){
			list.add(String.valueOf(i));
		}
		list.add("a");
		list.add("b");
		list.add("c");
		list.add("d");
		list.add("e");
		list.add("f");
		int len = number.length();
		int result = 0;
		for (int i = 0; i < len; i++) {
			int a = list.indexOf(String.valueOf(number.charAt(len - i - 1)));
			result = result + Integer.valueOf(a) * (int) Math.pow(valueA, i);
		}
		return result;
	}
	//将十进制字符串转化为B进制
	public String change(int valueB, int number) {
		int temp1 = number;
		int temp2 = 0;
		String[] s = new String[16];
		String str = new String(" ");
		for(int i=0;i<16;i++){
			if (i == 10) {
				s[i]="a";
			} else if (i == 11) {
				s[i]="b";
			} else if (i == 12) {
				s[i]="c";
			} else if (i == 13) {
				s[i]="d";
			} else if (i == 14) {
				s[i]="e";
			} else if (i == 15) {
				s[i]="f";
			} else {
				s[i]=String.valueOf(i);
			}
		}
		while (temp1 >= valueB) {
			temp2 = temp1 % valueB;
			temp1 = temp1 / valueB;
			str = str.concat(s[temp2]);
			}
		return str.concat(s[temp1]);
	}
	public static void main(String[] args) {
		Main main = new Main();
		Scanner sc = new Scanner(System.in);
		int valueA = sc.nextInt();
		int valueB = sc.nextInt();
		String number = sc.next();
		sc.close();
		int data = main.changeDecimal(valueA, number);
		StringBuffer ss = new StringBuffer(main.change(valueB, data));
		System.out.println(ss.reverse().toString().trim());	
	}
}

第一次做的时候遇到的问题
1,将A进制转化为十进制时只考虑了十进制一下的转化
即每一位乘以对应的A次方
但对于大于十进制的会存在字母,比如
16 10
a
将16进制的a转化为十进制,这样就不能直接用a乘16的0次方;
得先将字母a转化为对应的数值
2,然后接下来就是将十进制转化为任意其他进制
需要注意到就是转为十以上进制时的字母转化问题

第一次做的时候感觉到处都是bug,感觉很复杂,
做出来之后就感觉没什么挺简单的,
代码还可以简化,比如char数组…

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值