36进制加法

问题描述

36进制由0-9,a-z,共36个字符表示
例如:

'1b' 换算成10进制等于 1 * 36^1 + 11 * 36^0 = 36 + 11 = 47

要求按照加法规则计算出任意两个36进制正整数的和

如:按照加法规则,计算'1b' + '2x' = '48'

要求:

  • 不允许把36进制数字整体转为10进制数字,计算出10进制数字的相加结果再转回为36进制

思路

  • 按照十进制的加法方法,满36向前进一位
public class Main {

    final static String value = "0123456789ABCDEFGHIJKLMNOPGQRSTUVWXYZ";

    static String f(String str1, String str2) {
        char[] s1 = str1.toCharArray();
        char[] s2 = str2.toCharArray();
        int i = s1.length - 1;
        int j = s2.length - 1;
        int tmp = 0;
        StringBuilder sb = new StringBuilder();

        while (i >= 0 && j >=0) {
            char c1 = s1[i];
            char c2 = s2[j];
            int sum = value.indexOf(c1) + value.indexOf(c2) + tmp;
            if (sum >= 36) {
                tmp = 1;
                sb.append(value.charAt(sum & 36));
            } else {
                sb.append(value.charAt(sum));
            }
            i--;
            j--;
        }
        //第一个数位数多于第二个数的位数
        while (i >= 0) {
            int sum = value.indexOf(s1[i]) + tmp;
            if (sum >= 36) {
                tmp = 1;
                sb.append(value.charAt(sum & 36));
            } else {
                sb.append(value.charAt(sum));
            }
            i--;
        }
        //第二个数位数多于第一个数的位数
        while (j >= 0) {
            int sum = value.indexOf(s2[j]) + tmp;
            if (sum >= 36) {
                tmp = 1;
                sb.append(value.charAt(sum & 36));
            } else {
                sb.append(value.charAt(sum));
            }
            j--;
        }
        //temp!=0说明有进位,这是需要把进位的1拼接
        if (tmp != 0) {
            sb.append('1');
        }
        return sb.reverse().toString();
    }

    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        String str1 = scan.next();
        String str2 = scan.next();
        String r = f(str1,str2);
        System.out.println(r);
    }
}
全部评论
亲,你这个代码没有测试过吗?就没发现问题?
点赞 回复 分享
发布于 2022-07-26 11:56

相关推荐

吐泡泡的咸鱼:我也工作了几年了,也陆陆续续面试过不少人,就简历来说,第一眼学历不太够,你只能靠你的实习或者论文或者项目经历,然后你没有论文,没有含金量高的比赛和奖项,只能看实习和项目,实习来说,你写的实习经历完全不清楚你想找什么工作?行研?数据分析?且写的太少了,再看项目,这些项目先不说上过大学读过研究生的都知道很水,然后对你想找的岗位有什么帮助呢?项目和实习也完全不匹配啊,你好像在努力将你所有的经历都放在简历里想表现你的优秀,但是对于你想找的岗位来说,有什么用呢?最后只能获得岗位不匹配的评价。所以你需要明白你想要找的岗位要求是什么,是做什么的,比如产品经理,然后再看你的经历里有什么匹配的上这个岗位,或者对这个岗位以及这个岗位所在的公司有价值,再写到你的简历上
点赞 评论 收藏
分享
海螺很能干:每次看到这种简历都没工作我就觉得离谱
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客企业服务