首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >一次面试的经历,​设计一个加法,满足100位的数字相加?

一次面试的经历,​设计一个加法,满足100位的数字相加?

作者头像
用户2242639
发布于 2021-06-29 07:35:37
发布于 2021-06-29 07:35:37
35500
代码可运行
举报
文章被收录于专栏:Java经验总结Java经验总结
运行总次数:0
代码可运行

题目

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

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

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

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

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

先打个比方:

整数A:8765876219

整数B:8882423

第一步先画出数据:

A:

9

1

2

6

7

8

5

6

7

8

0

+

B:

3

2

4

2

8

8

8

0

0

0

0

=

C:

0

0

0

0

0

0

0

0

0

0

0

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

第二步计算:

A:

9

1

2

6

7

8

5

6

7

8

0

+

B:

3

2

4

2

8

8

8

0

0

0

0

=

C:

2

1

0

0

0

0

0

0

0

0

0

9+3=12,2写在结果的第一个篮子中,进位的1放入第二个篮子中。

第三步计算:

A:

9

1

2

6

7

8

5

6

7

8

0

+

B:

3

2

4

2

8

8

8

0

0

0

0

=

C:

2

4

0

0

0

0

0

0

0

0

0

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

......一次次轮回计算直到结束:

A:

9

1

2

6

7

8

5

6

7

8

0

+

B:

3

2

4

2

8

8

8

0

0

0

0

=

C:

2

4

6

8

5

7

4

7

7

8

0

得到结果,然后逆序,判断首位是否是0,是0去掉,不是0,就保留,则的到最后结果。

好了思路出来了,开始实施!

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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"));
}

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-02-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Java经验总结 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验