一道面试题,完成两个36进制数的加法运算,36个字母从0开始到9,接着从A开始到Z结束,最大值Z,最小值0

本例用了进制间的相互转化,比较简单:

package base;

import org.junit.Test;

public class TestBase {
	String str ="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
	
	StringBuilder result = null;
	public String add(String numA,String numB){
		result = new StringBuilder();
		//将两个相加的数字转换成十进制
		int numa = this.threeSixTo10(numA);
		int numb = this.threeSixTo10(numB);
		//算出十进制总和
		int sum = numa+numb;
		return this.tenTo36(sum);
	}
	
	public int threeSixTo10(String num){
		//将36位数字转化成字符数组
		char[] chs = num.toCharArray();
		//定义一个参数用来存放所有值
		int number=0;
		for(int i=0;i<chs.length;i++){
			//取出36位数字的每个位上的数字
			char ch = chs[i];
			//找到该数字所在的str中的位置
			int index = str.indexOf((ch+"").toUpperCase());
			//循环计算每个位置的十进制值
			for(int j=0;j<chs.length-i-1;j++){
				index = index*36;
			}
			number = number+index;
		}
		return number;
	}
	
	public String tenTo36(int num){
		
		int flag = num/36;
		if(flag<=1){
			result.append(str.charAt(num));
		}else{
			result.append(str.charAt(flag));
			this.tenTo36(num%36);
		}
		return result.toString().toLowerCase();
	}
	
	@Test
	public void testBase(){//362+111=473
//		System.out.println(new String("5d").length());
//		System.out.println(this.threeSixTo10(new String("5d")));
//		System.out.println(tenTo36(193));
		System.out.println(this.add("a2", "33"));
		System.out.println(this.add("0", "0"));
//		System.out.println(473%36);
	}
}



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值