加法,你会吗?

简介: 加法,你会吗?

题目

面试官:设计一个加法,满足100位的数字相加?

我:好的。(内心在想"有病吧!这面试官,问些没用的问题!怎么办,不会啊!")

面试官:20分钟哦,你先想,我倒杯水去。

我:(内心在想"水到慢点,一定要慢点啊!")

脑子里开始转:"字符串","拆散","倒叙","一位一位处理","长度不一样怎么处理?算最大位","进位怎么处理?","结果位数怎么定义?最大位数加1",啊啊啊啊,好烦,想回家!不管了,先按着这个路子一步一步走吧。

先打个比方:

整数A:8765876219

整数B:8882423

第一步先画出数据:

col 1 col 2 col 3 col 4 col 5 col 6 col 7 col 8 col 9 col 10 col 11 col 12
A: 9 1 2 6 7 8 5 6 7 8 0
col 1 col 2 col 3 col 4 col 5 col 6 col 7 col 8 col 9 col 10 col 11 col 12
B: 3 2 4 2 8 8 8 0 0 0 0

=

col 1 col 2 col 3 col 4 col 5 col 6 col 7 col 8 col 9 col 10 col 11 col 12
C: 0 0 0 0 0 0 0 0 0 0 0

结果先设定比最大一位多一位,还有如果位数小的,我们记为0,为了方便看我这边让格子数相等。

第一步先画出数据:

col 1 col 2 col 3 col 4 col 5 col 6 col 7 col 8 col 9 col 10 col 11 col 12
A: 9 1 2 6 7 8 5 6 7 8 0
col 1 col 2 col 3 col 4 col 5 col 6 col 7 col 8 col 9 col 10 col 11 col 12
B: 3 2 4 2 8 8 8 0 0 0 0

=

col 1 col 2 col 3 col 4 col 5 col 6 col 7 col 8 col 9 col 10 col 11 col 12
C: 0 0 0 0 0 0 0 0 0 0 0

结果先设定比最大一位多一位,还有如果位数小的,我们记为0,为了方便看我这边让格子数相等。

第三步计算:

col 1 col 2 col 3 col 4 col 5 col 6 col 7 col 8 col 9 col 10 col 11 col 12
A: 9 1 2 6 7 8 5 6 7 8 0
col 1 col 2 col 3 col 4 col 5 col 6 col 7 col 8 col 9 col 10 col 11 col 12
B: 3 2 4 2 8 8 8 0 0 0 0

=

col 1 col 2 col 3 col 4 col 5 col 6 col 7 col 8 col 9 col 10 col 11 col 12
C: 2 4 0 0 0 0 0 0 0 0 0

1+2+1=4,整数A加整数B再加进位的1是4,放入结果的第二的篮子中。

public static String bigNumSum(String bigNumA,String bigNumB) {
    //1. String转为char数组
    //bigNumA, bigNumB 翻转两个字符串后,个位十位相加比较方便
    char[] bigNumAChars = new StringBuffer(bigNumA).reverse().toString().toCharArray();
    char[] bigNumBChars = new StringBuffer(bigNumB).reverse().toString().toCharArray();
    //2. 在长的数组长度上加一来存结果
    int resultLength;
    if (bigNumAChars.length > bigNumBChars.length) {
        resultLength = bigNumAChars.length;
    }else {
        resultLength = bigNumBChars.length;
    }
    int[] result = new int[resultLength + 1];
    //3.对位相加
    for (int i = 0; i < resultLength; i++) {
        // 如果当前的i超过了某个数组的长度,就用0代替高位了,和另一个字符数组中的数字相加
        int Aint = i < bigNumAChars.length ? (bigNumAChars[i] - '0') : 0;
        int Bint = i < bigNumBChars.length ? (bigNumBChars[i] - '0') : 0;
        int temp = result[i];
        temp += Aint;
        temp += Bint;
        result[i] = temp;
        //判断是否进位
        if (temp >= 10) {
            result[i + 1] = temp / 10;
            result[i] = temp % 10;
        }
    }
    //4. 存储最后的结果
    StringBuffer sb = new StringBuffer();
    //判断最高位是0还是1, 0无需保存
    if (result[result.length - 1] == 1) {
        sb.append(1);
    }
    for (int i = result.length-2; i >= 0; i--) {
        sb.append(result[i]);
    }
    return sb.toString();
}
public static void main(String[] args) {
    System.out.println(bigNumSum("8765876219","8882423"));
}

640.png
敲完收工.....面试官怎么还不来?

相关文章
|
5月前
|
Python
首先,我们可以从基本的数学运算开始,比如加法、减法、乘法、除法等。
首先,我们可以从基本的数学运算开始,比如加法、减法、乘法、除法等。
|
6月前
537. 复数乘法
537. 复数乘法
|
7月前
|
计算机视觉
加法运算
【5月更文挑战第8天】加法运算。
152 4
|
7月前
|
C++
C++系列-第1章顺序结构-6-加法、减法和乘法
C++系列-第1章顺序结构-6-加法、减法和乘法
大数运算!(2)减法
大数运算!(2)减法
105 0
|
Java
不用加减乘除做加法
不用加减乘除做加法
105 0
不用加减乘除做加法
|
数据库
关系代数运算——除法运算
关系代数运算——除法运算
289 0
关系代数运算——除法运算
04:带余除法
04:带余除法
213 0