`
poower
  • 浏览: 18672 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

大数运算

阅读更多

public class bigadd {

    /**
     * @param args
     */
    //***********************两个相等数相加**********************************88
    public static String add(String s){
        char c[]=s.toCharArray();
        for(int i=0;i<c.length/2;i++){
            char t=c[i];
            c[i]=c[c.length-1-i];
            c[c.length-1-i]=t;
        }
        int r[]=new int[c.length+1];
        int carry=0;
        for(int i=0;i<c.length;i++){
            int t=Integer.parseInt(c[i]+"")+Integer.parseInt(c[i]+"")+carry;
            carry=t/10;
            r[i]=t%10;
        }
        r[c.length]=carry;
        String sr;
        if(r[c.length]==0)
            sr="";
        else
            sr="1";
        for(int j=r.length-2;j>=0;j--){
            sr+=r[j];
        }
        return sr;
    }
    //*******************************两个不同数相加*****************************************
    public static String adddif(String s1,String s2){
        char c1[] ;
        char c2[] ;
        if (s1.length() >= s2.length()) {
            c1 = s1.toCharArray();
            c2 = s2.toCharArray();
        }
        else{
            c2 = s1.toCharArray();
            c1 = s2.toCharArray();
        }
        for(int i=0;i<c1.length/2;i++){
            char t=c1[i];
            c1[i]=c1[c1.length-1-i];
            c1[c1.length-1-i]=t;
        }
        for(int i=0;i<c2.length/2;i++){
            char t=c2[i];
            c2[i]=c2[c2.length-1-i];
            c2[c2.length-1-i]=t;
        }
       
        int r[]=new int[c1.length+1];
        int carry=0;
        for(int i=0;i<c2.length;i++){
            int t=Integer.parseInt(c1[i]+"")+Integer.parseInt(c2[i]+"")+carry;
            carry=t/10;
            r[i]=t%10;
        }
        for(int i=c2.length;i<c1.length;i++){
            int t=Integer.parseInt(c1[i]+"")+carry;
            carry=t/10;
            r[i]=t%10;
        }
        r[c1.length]=carry;
        String sr;
        if(r[c1.length]==0)
            sr="";
        else
            sr="1";
        for(int j=r.length-2;j>=0;j--){
            sr+=r[j];
        }
        return sr;
    }
    //*************************求2的N次幂*********************************8
    public static String pow(int n){
        if(n==0)
            return "1";
        else if(n==1)
            return "2";
        else
            return add(pow(n-1));       
    }
   
    public static String sumpow(int p1,int n,int q){
        String sum="";
        String pre=pow(p1);
        for(int i=p1;i<=n;i=i+q){
            sum=adddif(sum,pre);
            for(int j=1;j<=2;j++)               
                pre=add(pre);
        }
        return sum;
    }
    //************************************相减***********************************
    public static String minus(String s1,String s2){
        char c1[] ;
        char c2[] ;
        if (s1.length() >= s2.length()) {
            c1 = s1.toCharArray();
            c2 = s2.toCharArray();
        }
        else{
            c2 = s1.toCharArray();
            c1 = s2.toCharArray();
        }
        for(int i=0;i<c1.length/2;i++){
            char t=c1[i];
            c1[i]=c1[c1.length-1-i];
            c1[c1.length-1-i]=t;
        }
        for(int i=0;i<c2.length/2;i++){
            char t=c2[i];
            c2[i]=c2[c2.length-1-i];
            c2[c2.length-1-i]=t;
        }
       
        int r[]=new int[c1.length];
        int carry=0;
        for(int i=0;i<c2.length;i++){
            int t=Integer.parseInt(c1[i]+"")-Integer.parseInt(c2[i]+"")-carry;
            if(t<0){
                r[i]=Integer.parseInt(c1[i]+"")-Integer.parseInt(c2[i]+"")+10-carry;
                carry=1;
            }
            else{
                r[i]=t;
                carry=0;
            }
        }
        for(int i=c2.length;i<c1.length;i++){
            int t=Integer.parseInt(c1[i]+"")-carry;
            if(t<0){
                carry=1;
                r[i]=9;
            }
            else{
                r[i]=t;
                carry=0;
            }
        }
        String str;
        if(r[c1.length-1]==0){
            str="";
        }
        else{
            str=""+r[c1.length-1];
        }
        for(int j=r.length-2;j>=0;j--){
            str+=r[j];
        }
        return str;
       
    }
    //**********************************减1****************************************
    public static String minus1(String s){
        char c[]=s.toCharArray();
        int i;
        for(i=0;i<c.length/2;i++){
            char t=c[i];
            c[i]=c[c.length-1-i];
            c[c.length-1-i]=t;
        }
        int t=0;
        for(i=0;i<c.length;i++){
            t=Integer.parseInt(c[i]+"");
            if(t>0){
                t=t-1;
                break;
            }           
        }
        c[i]=(t+"").charAt(0);
        System.out.println(t+" "+i);
        String str;
        if(c[c.length-1]=='0')
            str="";
        else
            str=c[c.length-1]+"";
       
        for(int j=c.length-2;j>=i;j--)
            str=str+c[j];
        for(int j=i-1;j>=0;j--)
            str+=9;
        return str;
    }
    //*************************************加1************************************
    public static String add1(String s){
        char c[]=s.toCharArray();
        int i;
        for(i=0;i<c.length/2;i++){
            char t=c[i];
            c[i]=c[c.length-1-i];
            c[c.length-1-i]=t;
        }
        int t=0;
        for(i=0;i<c.length;i++){
            t=Integer.parseInt(c[i]+"");
            if(t<9){
                t=t+1;
                break;
            }   
        }
        String str;
        if(i==c.length)
            str="1";
        else{
            c[i]=(t+"").charAt(0);
            str="";
        }
        for(int j=c.length-1;j>=i;j--)
            str=str+c[j];
        for(int j=i-1;j>=0;j--)
            str+=0;
        return str;
    }
   
    public static void main(String[] args) {
        // TODO 自动生成方法存根
        //System.out.println(pow(1000));
        //System.out.println(pow(999));
        //System.out.println(adddif(pow(999),pow(999)));
        //System.out.println(adddif("19","999"));
        System.out.println(sumpow((4-3),(1000-3),2));
        //System.out.println(minus(pow(1000),pow(999)));
        //System.out.println(add1(pow(1000)));
    }

}


分享到:
评论

相关推荐

    大数运算-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