offer收割机:两个长字符串数字相加求和(经典面试算法题)

 在面试中,为了缓解面试的尴尬,有些面试会然你写一写简单算法题来缓解气氛比如冒泡啊简单的算法题,今天给大家带了一道我遇到的一道算法题分享给他就,思路都写在对应代码的注释上,不懂可以看一下,有什么写的不对的大家可以指出来上代码

package com.interview;

import com.sun.javafx.image.BytePixelSetter;

public class Test2 {
    public static void main(String[] args) {
        String str1 = "568658123123312123123123123123131233132123123123131231233123131231231231231";
        String str2 = "132121231231231312312312312312312312312312312312313123123101";
        //reverse()方法是将字符串反转。
        //StringBuffer类是一个可变字符串类,它可以用来存储字符串。
        StringBuffer s1 = new StringBuffer(str1).reverse();
        StringBuffer s2 = new StringBuffer(str2).reverse();
        StringBuffer res = new StringBuffer();
        int len1 = s1.length();
        int len2 = s2.length();
        int len;
        //如果两个字符串长度不一样,则取长度较大的那个字符串的长度。
        if (len1 < len2) {
            //意思是:如果len1<len2,则len=len2,否则len=len1。
            len = len2;
            //用len2-len1的值来填充len1的空位。
            int count = len2 - len1;
            //将长度较小的字符串补全为长度较大的字符串的长度。
            while (count-- > 0)
                //对那个空位进行填充。追加
                s1.append("0");
        } else {
            //如果两个字符串长度一样,则取长度较大的那个字符串的长度。
            len = len1;
            //用len1-len2的值来填充len2的空位。
            int count = len1 - len2;
            //将长度较小的字符串补全为长度较大的字符串的长度。
            while (count-- > 0)
                s2.append("0");
        }

        int overflow = 0;
        int num;
        //遍历两个字符串的每一个字符,将两个字符相加。
        for (int i = 0; i < len; i++) {
            //charAt()方法是返回指定索引处的字符。
            //num是字符串的ASCII码值。
            num = s1.charAt(i) - '0' + s2.charAt(i) - '0' + overflow;
            //如果相加后的数字大于9,则将相加后的数字减去10,并将overflow设置为1。
            if (num >= 10) {
                //将相加后的数字减去10。
                overflow = 1;
                //将相加后的数字转换为字符。
                num = num - 10;
            } else {
                //如果相加后的数字小于10,则将overflow设置为0。
                overflow = 0;
            }
            //将相加后的数字转换为字符。
            res.append(String.valueOf(num));
        }
        //如果相加后的数字大于9,则将相加后的数字减去10,并将overflow设置为1。
        if (overflow == 1)
            //将相加后的数字转换为字符。
            res.append("1");
        //将结果转换为字符串。
        System.out.println(res.reverse().toString());
    }
}

这是主要思路是通过反转来求和

猜你喜欢

转载自blog.csdn.net/Fristm/article/details/125643431