2018-12-01 字符串相乘

题目:

字符串相乘

解法:

模拟手算乘法的过程, 首先, 我先把字符串计算结果从个位十位百位的从左往右排列, 计算完然后输出字符串的时候又从右往左遍历.

public String multiply(String num1, String num2) {
    // num1乘以num2不会超过他们两个的长度
    int len1 = num1.length();
    int len2 = num2.length();

    // 个位, 十位, 百位...
    int[] result = new int[len1 + len2];

    for (int i = len1 - 1; i >= 0; i--) {
        for (int j = len2 - 1; j >= 0; j--) {
            int n1 = num1.charAt(i) - '0';
            int n2 = num2.charAt(j) - '0';
            // 需要倒转一下,保持 个位, 十位, 百位这样的顺序
            result[len1 + len2 - 2 - (i + j)] += n1 * n2;
        }
    }

    // 所得的结果需要进位, 从个位开始加
    int carry = 0;
    for (int i = 0; i < result.length; i++) {
        result[i] += carry;
        // 求进位
        carry = result[i] / 10;
        // 得数位上的数
        result[i] = result[i] % 10;
    }

    // 转化成字符串
    StringBuilder sb = new StringBuilder();
    boolean initFlag = true;
    for (int i = result.length - 1; i >= 0; i--) {
        // 从高位向低位append
        if ((initFlag == true) && (result[i] == 0)) {
            continue;
        }
        initFlag = false;
        sb.append(result[i]);
    }
    return sb.length() == 0 ? "0" : sb.toString();
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 前言 最先接触编程的知识是在大学里面,大学里面学了一些基础的知识,c语言,java语言,单片机的汇编语言等;大学毕...
    oceanfive阅读 8,502评论 0 7
  • 1.把二元查找树转变成排序的双向链表 题目: 输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。 要求不...
    曲终人散Li阅读 8,700评论 0 19
  • 灵魂被困在肉体内,并不能体现,也不能释放 孤独的消耗掉,最后和实体一起消失,注入另一种容器 依然孤独,慢慢...
    醒着吗阅读 1,576评论 0 0
  • 2018年9月6日 星期四 晴 前进的路上 可能荆棘遍地,杂草纵生 那就磨练意志吧 前进路上 可能闲言碎语,异样眼...
    花海云裳阅读 4,410评论 21 21
  • C++ 构造和析构函数 构造函数 类的设计者通过提供一个构造函数(constructor)的特殊函数来保证每个对象...
    zjunchao阅读 1,391评论 0 0

友情链接更多精彩内容