首页 > 其他 > 详细

大数加法

时间:2021-03-14 14:05:30      阅读:21      评论:0      收藏:0      [点我收藏+]

字符串相加

public String add(String stra,String strb) {
        StringBuilder ret = new StringBuilder();
        int lena = stra.length();
        int lenb = strb.length();
        int la = 0,lb = 0;
        while(la < lena - 1 && stra.charAt(la) == ‘0‘) la ++;
        while(lb < lenb - 1 && strb.charAt(lb) == ‘0‘) lb ++;
        String newa = stra.substring(la,lena);
        String newb = strb.substring(lb,lenb);
        lena = newa.length();
        lenb = newb.length();
        int[] numa = new int[lena];
        int[] numb = new int[lenb];
        for(int i = 0;i < lena; ++i) numa[i] = newa.charAt(lena - i - 1) - ‘0‘;
        for(int i = 0;i < lenb; ++i) numb[i] = newb.charAt(lena - i - 1) - ‘0‘;
        int carry = 0;
        for(int i = 0;i < lena || i < lenb; ++i) {
            if(i < lena) carry += numa[i];
            if(i < lena) carry += numb[i];
            ret.append(carry % 10);
            carry /= 10;
        }
        if(carry > 0) ret.append(carry);
        return ret.reverse().toString();
    }

36进制加法

    public char getChar(int num) {
        if(num <= 9) return (char)(num + ‘0‘);
        else return (char)(num - 10 + ‘a‘);
    }

    public int getInt(char ch) {
        if(ch >= ‘0‘ && ch <= ‘9‘) return ch - ‘0‘;
        else return ch - ‘a‘ + 10;
    }
    public String add36(String stra,String strb) {
        StringBuilder ret = new StringBuilder();
        int lena = stra.length();
        int lenb = strb.length();
        int la = 0,lb = 0;
        while(la < lena - 1 && stra.charAt(la) == ‘0‘) la ++;
        while(lb < lenb - 1 && strb.charAt(lb) == ‘0‘) lb ++;
        String newa = stra.substring(la,lena);
        String newb = strb.substring(lb,lenb);
        lena = newa.length();
        lena = newb.length();
        int[] numa = new int[lena];
        int[] numb = new int[lenb];
        for(int i = 0;i < lena; ++i) numa[i] = getInt(newa.charAt(lena - i - 1));
        for(int i = 0;i < lena; ++i) numb[i] = getInt(newb.charAt(lena - i - 1));
        int carry = 0;
        for(int i = 0;i < lena || i < lenb; ++i) {
            if(i < lena) carry += numa[i];
            if(i < lena) carry += numb[i];
            ret.append(getChar(carry % 36));
            carry /= 36;
        }
        if(carry > 0) ret.append(getChar(carry));
        return ret.reverse().toString();
    }

大数加法

原文:https://www.cnblogs.com/lukelmouse/p/14532194.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!