美文网首页
算法(大数运算)

算法(大数运算)

作者: JetLu | 来源:发表于2016-10-06 14:05 被阅读45次

除法


其实就是借位相减。

a='157794750267131502212476817800345498121872783333389747424011531025366277535262539913701806290766479189477533597854989606803194253978660329941980786072432806427833685472618792592200595694346872951301770580765135349259590167490536138082469680638514416594216629258349130257685001248172188325316586707301643237607'
b='65'

x = a.split('').map(e => parseInt(e))
y = b.split('').map(e => parseInt(e))

div(x, y)
const div = (x, y) => {
    const
        q = []

    let
        cmp, times,
        next = y.length,
        r = x.slice(0, y.length)

    do {
        for (times = 0; times < 10; times++) {
            /*
            * 比较除数与余数大小
            * 除数 > 余数 ? 1 : -1
            */
            if (y.length != r.length)
                cmp = y.length > r.length ? 1 : -1
            else {
                cmp = 0
                for (let i = 0; i < r.length; i++) {
                    if (y[i] != r[i]) {
                        cmp = y[i] > r[i] ? 1 : -1
                        break
                    }
                }
            }

            /*
            * 余数大于除数
            * 余数减去除数
            */
            if (cmp < 0) {
                const
                    delta = r.length - y.length
                let
                    _i,
                    carry = 0

                for (let i = y.length - 1; i >= 0; i--) {
                    _i = i + delta
                    r[_i] = r[_i] - y[i] + carry
                    r[_i] < 0 ? (r[_i] += 10, carry = -1) : carry = 0
                }
                carry && (r[_i-1] += carry)
                for (; !r[0]; r.shift()) {}
            } else break
        }
        q[next] = cmp ? times : (r = [x[next]], ++times)
        cmp == 1 && r.push(x[next])
    } while (next++ < x.length)
    return q
}

相关文章

  • 算法(大数运算)

    除法 其实就是借位相减。

  • RSA 大数的处理

    1.大数储存 RSA 依赖大数运算,目前主流RSA 算法都建立在512 到1024位的大数运算之上。而大多数的编译...

  • 蒙哥马利乘法原理

    引子 加密算法中,有很多大数(256bits~2048bits)的运算,基础之一便是类似于求 的值。在这个运算中...

  • Java大数运算

    关于大数运算,c++选手需要自己编写高精度算法,而Java则自带大整数类。这篇文章简单记录一下,关于Java大数运...

  • 有符号大数+、-运算

    题目描述: 应用中需要解决大数运算问题。请设计有符号大数类,能支持大数+、-运算和输出。假定本题大数在200位以内...

  • 无符号大数+-*运算

    题目描述: 应用中需要解决大数运算问题。请设计无符号大数类,能支持大数+,-,*,比较运算和输出。假定本题大数在2...

  • 2018-06-07

    算法笔记 1 大O算法 1:O(运算次数):表示运算最糟糕情况下 运算时间,表示算法时间的增速 2数组链表 在链表...

  • 数字处理类

    数字格式化数字运算随机数大数字运算

  • 再看求最大公约数的算法

    再看求最大公约数的算法 由渐入深学习大公约数的算法,从最简单的遍历循环的方法到通过移位运算大幅提高大数情况下的计算...

  • 递归、回溯、分治

    递归 (1)子集 方式一:递归算法 方式二:位运算算法 (2)子集II 方法一:递归算法 方法二:位运算 (3)组...

网友评论

      本文标题:算法(大数运算)

      本文链接:https://www.haomeiwen.com/subject/spmeyttx.html