`
googya
  • 浏览: 143388 次
  • 性别: Icon_minigender_1
  • 来自: 汉川
社区版块
存档分类
最新评论

大数运算

阅读更多
基于内存的有效运用,程序语言中规定了各种不同的数据类型,因此变量所可以表达的最大整数受到限制,例如123456789123456789这样的数就不可能存储在long型的变量当中(例如c/c++),我们称大数运算。

解法
一个变量无法表示超长整数,则就使用多个变量,当然这使用数组最为方便,假设程序语言的最大数据类型可以存储至65535的数好了,为了计算方便及符合使用十进制的习惯,让每一个数组元素可以存储四个位数,也就是0到9999的数,例如:


像300!这样的数(当然在Ruby中不存在问题,在其他的语言中可能就存在问题,这里主要是想说明这个方法),解法就是使用程序中的乘法函数,至于要算到多大,就看需要

require 'mathn'
class BigNumber

    def self.add(a,b)
    carry=0
    c=[0]*a.size
    t=(a.size-1)
  until t==-1
      c[t]=a[t]+b[t]+carry
      if(c[t]<10000)
        carry=0
      else
        c[t]-=10000
        carry=1
      end
      t-=1
  end
    c
  end

  def self.subtract(a,b)
     borrow=0
    c=[0]*a.size
    t=a.size-1
    until t==-1
      c[t]=a[t]-b[t]-carry
      if(c[t]>=0)
        borrow=0
      else
        c[t]+=10000
        borrow=1
      end
      t-=1
    end
    c
  end


  def self.multiply(a,b)

    borrow=0
    c=[0]*a.size
    t=a.size-1
   until t==-1
      tmp=a[t]*b+carry
      c[t]=tmp % 10000
      carry=tmp / 10000
      t-=1
  end
    c
  end

  def self.divide(a,b)
    remain=0
    c=[0]*(a.size)
    t=a.size-1
   until t==-1
      tmp=a[t]+remain
      c[t]=tmp / b
      remain=(tmp%b) * 10000
      t-=1
    end
    c
  end
end

a = [1234, 5678, 9910, 1923, 1124]
b = [1234, 5678, 9910, 1923, 1124]

c = BigNumber.add(a, b)
p c
for i in 0..(c.size-1)
  print c[i]
end


  • 大小: 24.1 KB
1
1
分享到:
评论
2 楼 googya 2009-11-06  
貌似乘法 除法的程序写的不正确哦
1 楼 googya 2009-11-06  
自己先顶一个!
这里的循环使用的是until,本想使用range的,可是range不支持由大到小的范围,后来试了一下downto,好像又有点问题。所以就用了until,这个其实也很不错的。不过就是要注意它的结束条件,否则很容易出错

相关推荐

    大数运算-RSA-c语言大数运算库

    该算法基于两个大素数的乘积,对于一般用户来说,这种大数的运算难以直观理解,因此需要专门的大数运算库来处理。在C语言中,大数运算库扮演着至关重要的角色,它们提供了高效且精确的大整数计算功能。 “BigNum ...

    delphi大数运算单元

    在编程领域,大数运算(BigInt)是指处理超出标准整型数据类型范围的数值计算。在Delphi中,由于内置的Integer、Int64等类型有限的存储范围,当需要进行大数运算时,通常需要借助第三方库或者自定义的算法来实现。...

    大数运算miracl 库及使用手册.zip

    大数运算miracl 库及使用手册 MIRACL(Multiprecision Integer and Rational Arithmetic C/c++ Library)是一套由Shamus Software Ltd.所开发的一套关于大数运算函数库,用来设计与大数运算相关的密码学之应用,包含了...

    大数运算和RSA加密算法

    ### 大数运算和RSA加密算法 在计算机科学与信息安全领域,大数运算是一个核心概念,尤其是在公钥加密算法如RSA中起着至关重要的作用。大数运算涉及到对非常大的数字进行加、减、乘、除等操作,传统的小整数运算方法...

    bignum大数运算库

    在IT领域,大数运算库是处理超过标准整型范围的大整数的工具,它们在密码学、数学计算以及分布式计算等场景中扮演着重要角色。"bignum大数运算库"是一个专为资源受限环境设计的解决方案,比如移动设备和嵌入式设备。...

    C++大数运算 支持浮点运算

    在C++编程中,大数运算通常涉及到处理超出标准整型或浮点型变量范围的数值。这样的操作在处理加密算法、金融计算、数学问题或需要精确表示大数字的场景中非常常见。在这个主题中,我们将深入探讨如何使用C++实现大数...

    C语言 大数运算(无限大小)头文件

    C语言大数运算(无限大小)头文件 本资源是一个C语言的大数运算头文件,支持无限大小的整数运算,包括加减乘除、余数、比较运算符等。该头文件提供了一个名为`longint`的类,重载了多种符号,支持char*、string、...

    大数运算程序,支持100位

    在IT领域,大数运算是一项重要的技术,尤其在加密、分布式计算、数学模拟以及金融计算等领域有着广泛应用。本文将深入探讨“大数运算程序,支持100位”这一主题,解析其背后的理论基础和实现机制。 首先,我们来...

    大数运算的实现bigint

    在IT领域,大数运算(BigInt)是一种处理超出标准整型范围的大整数的计算方法。这在密码学中尤其重要,因为ECC(椭圆曲线加密)和RSA(公钥加密)等算法通常涉及非常大的数值。在给定的标题和描述中,我们看到一个...

    c++大数运算的基本思路

    在C++编程中,大数运算(大整数运算)是指处理超过标准整型变量所能表示范围的数值计算。为了实现大数运算,通常需要自定义数据结构和算法。以下是一个基于C++的大数运算的基本思路,以CUSuperInt类为例进行说明。 ...

    毕设论文基于大数运算的算术编码实现

    ### 基于大数运算的算术编码实现 #### 1. 绪论 ##### 1.1 数据压缩与熵编码 数据压缩技术旨在减少数据存储或传输所需的比特数,从而提高存储空间利用率和传输效率。根据压缩过程中是否允许信息损失,数据压缩可以...

    大数运算的类

    为了解决这个问题,开发者通常会使用特定的类或库来进行大数运算。标题中的"大数运算的类"指的是C++中用于处理大数的自定义数据结构或第三方库。这种类通常会实现整数的动态存储和各种算术操作,如加法、减法、乘法...

    高精度大数运算类

    该大数运算类是一个支持超高精度和超大数的基本运算类,最高精度能够达到一百亿位有效数字,最大能够表示10的2147483648次方,支持基础的四则运算和比较运算。该类的特点是使用指数形式表示数据,应此空间占用少,...

    C经典算法之超长整数运算(大数运算)

    ### C经典算法之超长整数运算(大数运算) 在计算机编程中,尤其是在C/C++这类语言中,由于变量的存储空间有限,因此能够表示的整数范围也受到了限制。例如,在C语言中,一个`long`类型的变量通常只能表示一定范围...

    大数运算控件

    "大数运算控件"是一种专门用于处理大数据计算的软件组件,主要针对超过常规整型数据范围的大整数进行加、减、乘、除以及乘方等运算。在计算机科学中,由于整型数据类型有其固定的存储长度,当数值超出这个范围时,...

    大数运算\大数高精度计算

    ### 大数运算与高精度计算 在计算机科学领域中,大数运算指的是对超出标准整型或浮点型变量所能表示的最大值的数据进行的计算。这类运算在密码学、金融计算、科学研究等领域中有着广泛的应用。对于大数的加、减、乘...

    大数运算库miracl 有了miracl这样的函数库,你可以直接调用函数,来实现你要的公钥密码学的某个功能.zip

    其中,大数运算库如MIRACL(Multiple-precision Integer and Rational Arithmetic Library)为实现复杂的加密算法提供了强大的支持。 MIRACL是一个高效且灵活的大整数运算库,专为处理大整数和复数运算而设计。它...

    c++大数运算算法实现_源代码 原创

    在C++编程中,大数运算通常涉及到处理超出标准整型或浮点型变量范围的数值。本项目提供了一套原创的源代码实现,能够处理任意位数的大数进行加、减、乘、除操作。这在一些特定的计算场景,如密码学、计算机图形学...

    带大数运算库的rsa算法

    1. **大数运算库**:RSA算法涉及大整数的加法、乘法和模逆运算,这些操作在标准的计算机整数运算中可能无法处理,因此需要一个专门的大数运算库来处理这些大整数计算。VLONG.CPP和VLONG.HPP可能是这个大数运算库的...

    无限精度大数运算库 windows

    标题 "无限精度大数运算库 windows" 指涉的是一个专为Windows操作系统设计的高精度数学计算库,用于处理超出标准数据类型所能表示范围的大整数或大浮点数。这种运算库在科学计算、金融计算、密码学、游戏开发等领域...

Global site tag (gtag.js) - Google Analytics