`

一个实现长整型数相加减的小程序

 
阅读更多

import java.io.*;

public class BigInteger//定义长整型的类
{
    private static final int add1Max=100;//可计算最长位数
    private static final int add2Max=100;//同上
    private char[] add1 = new char[add1Max];
    private char[] add2 = new char[add1Max];
    private int len1;
    private int len2;

    public void setAdd1() throws IOException
    {
        int i=0;
        String sLine1;
        System.out.print("Please input add1 : ");//输入第一个长整数
        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
        sLine1=in.readLine();
        for(;i<sLine1.length();i++)
            add1[i]=sLine1.charAt(i);
       
        for(i=0;i<add1Max;i++)//len1=add1.length()
        {
            if(add1[i]!='\0')
                len1++;
        }
    }

    public void setAdd2() throws IOException
    {
        int i=0;
        String sLine2;
        System.out.print("Please input add2 : ");//输入第二个长整数
        BufferedReader in2 = new BufferedReader(new InputStreamReader(System.in));
        sLine2 = in2.readLine();
        for(i=0;i<sLine2.length();i++)
            add2[i]=sLine2.charAt(i);
       
        for(i=0;i<add2Max;i++)//len2=add2.length()
        {
            if(add2[i]!='\0')
                len2++;
        }
    }

    public char[] getAdd1()
    {
        return add1;
    }

    public char[] getAdd2()
    {
        return add2;
    }

    public int getLen1()
    {
        return len1;
    }

    public int getLen2()
    {
        return len2;
    }

    public void add(char[] add1,char[] add2)//BigInteger相加方法
    {
        int len = Math.max(len1,len2);
        int i;
        char[] temp1 = new char[len];
        char[] temp2 = new char[len];
        char[] result = new char[len+1];
               
        for(i=0;i<len1;i++)
            temp1[len-1-i]=add1[len1-1-i];
        for(i=0;i<len2;i++)
            temp2[len-1-i]=add2[len2-1-i];
       
        int m=0;
        for(i=0;i<len;i++)//相加
        {
            if(temp1[len-1-i]!=0)
                temp1[len-1-i]-=48;
            if(temp2[len-1-i]!=0)
                temp2[len-1-i]-=48;
            m=temp1[len-1-i]+temp2[len-1-i];
            if(m>=10)
            {
                m-=10;
                result[len-i]+=m;
                result[len-1-i]+=1;
            }
            else result[len-i]+=m;
        }
       
        System.out.print("add1 + add2 = ");//输出相加结果
        i=0;
        if(result[0]==0)
            i=1;
            for(;i<len+1;i++)
                System.out.print(Integer.toString(result[i]));
    }

    public void sub(char[]sub1,char[]sub2)//BigInteger相减方法
    {
        int len = Math.max(len1,len2);
        int i;
        char[] temp1 = new char[len];
        char[] temp2 = new char[len];
        char[] result = new char[len+1];
               
        if(len1>len2)
        {
            for(i=0;i<len1;i++)
                temp1[len-1-i]=sub1[len1-1-i];
            for(i=0;i<len2;i++)
                temp2[len-1-i]=sub2[len2-1-i];
        }else//保证减数大于被减数
        {
            for(i=0;i<len1;i++)
                temp2[len-1-i]=sub1[len1-1-i];
            for(i=0;i<len2;i++)
                temp1[len-1-i]=sub2[len2-1-i];
        }
       
        int m=0;
        for(i=0;i<len;i++)//相减
        {
            if(temp1[len-1-i]!=0)
                temp1[len-1-i]-=48;
            if(temp2[len-1-i]!=0)
                temp2[len-1-i]-=48;
            m=temp1[len-1-i]-temp2[len-1-i];
            if(m<0)//如果计算的那一位的减数小于被减数那么相前一位借10
            {
                m+=10;
                result[len-i]+=m;
                temp1[len-1-i]-=1;
            }
            else result[len-i]+=m;
        }
        System.out.print("add1 - add2 = ");//输出减法结果
        i=0;
        while(result[i]==0)
            i++;
        if((len2>len1)||(len1==len2&&sub1[0]<sub2[0]))
            System.out.print("-");
            for(;i<len+1;i++)
                System.out.print(Integer.toString(result[i]));
    }

    public static void main(String[] args) throws IOException//主方法   
    {
        BigInteger big = new BigInteger();//生成一个BigInteger对象
        big.setAdd1();//得到数1
        big.setAdd2();//得到数2
        char[] num1 = big.getAdd1();//相加
        char[] num2 = big.getAdd2();//相减
        int len1 = big.getLen1();
        int len2 = big.getLen2();
        System.out.println();
        System.out.println("The length of add1 is : " + len1);
        System.out.println("The length of add2 is : " + len2);
        big.add(num1,num2);
        System.out.println();
        big.sub(num1,num2);
    }
}

分享到:
评论

相关推荐

    超长整型数据的存储与运算C代码

    本篇文章将详细解析一个用于超长整型数据存储与运算的C语言程序片段,该程序涵盖了超长整型数据的加、减、乘法运算以及输入处理和比较功能。 #### 代码概览 首先,程序定义了几个必要的头文件,包括`stdio.h`, `...

    C代码实现超长整数字符串 相加,及相应执行程序

    在本文中,我们将深入探讨如何使用C语言实现超长整数字符串的相加操作。超长整数是指那些超过了标准整型(如int、long long)所能表示范围的整数,通常出现在大数运算或者加密算法中。由于C语言本身并不支持这样的...

    长整数的相加_c++小程序_源码

    在C++编程中,处理大整数(也称为长整数)的相加是一个常见的问题,特别是在数值计算、加密算法或者模拟大型系统时。由于C++标准库中的`int`、`long`或`long long`类型有其数值范围限制,当超过这个范围时,就需要...

    计算器——长整型、高精度计算

    标题"计算器——长整型、高精度计算"指的是设计一个计算器,它能够处理超过标准整型范围的数字,并且能够执行基本的加减乘除运算。这种计算器通常需要自定义数据结构,如链表,来存储长整型数字的每一位。链表是一个...

    实现同名后数目相加的统计功能(程序)

    本篇文章将根据给定的文件标题、描述及部分内容,详细介绍如何实现一个能够处理同名后数目相加的统计功能的程序。 #### 题目背景与需求分析 根据题目描述,我们需要编写一个程序来读取一个以等号`=`划分名称和数值...

    C语言编写两个一百位数相加的程序

    为了将用户输入的字符串转换为可以进行数学运算的数组形式,程序使用了一个辅助函数`change`,该函数接收一个字符并返回其对应的整数值: ```c int change(char a) { switch (a) { case '0': return 0; break; ...

    c语言难题+程序 大数相加减

    在C语言中,处理大数(超过普通整型或浮点型变量范围的数字)的加减运算是一项挑战。这通常涉及到使用字符数组来存储这些大数,因为字符数组可以容纳任意长度的字符串,从而表示任意大小的数字。下面我们将详细讨论...

    编写一个用输入和输出流运算符进行的输入和输出的程序。从键盘输入两个数,分别对两个数进行加,减,乘和除的运算。

    本程序的目标是实现一个简单的命令行计算器,它能够接收用户从键盘输入的两个数,并进行加、减、乘、除四种基本数学运算。以下是关于该程序的详细解释: 1. **输入流运算符(cin)**: 输入流运算符`cin`用于从...

    C语言编一个程序完成64位数据(无符号)的加法,减法运算

    根据给定的信息,本文将详细解释如何在C语言中编写一个程序来实现64位无符号整数的加法和减法运算。 ### 一、背景介绍 在计算机科学领域,处理大整数是一个常见的需求,尤其是在那些需要精确计算且数字可能非常大...

    VC的小程序(连续整型数的阶乘累加)

    总之,"VC的小程序(连续整型数的阶乘累加)"是编程教育中的一个基础练习,它涵盖了整数阶乘计算和累加操作的核心概念,是学习C++或其他类似编程语言时的经典例子。通过此类练习,不仅可以提升编程技巧,还能增强对...

    C++两个一维数组相加求和

    接下来,我们需要一个新数组`sum`来存储两个数组相加的结果。由于数组不能动态扩展,所以`sum`的长度应为`len1 + len2`,确保可以容纳所有元素。 在实现数组相加的过程中,我们使用两个独立的`for`循环。第一个循环...

    用C语言编写两个大数相加

    本资源主要探讨如何使用C语言实现两个超过100位的大数相加,这是对传统整型数据处理能力的扩展,因为C语言的标准整型类型(如int和long)通常无法存储这么大的数值。 C语言本身并不直接支持大数运算,但我们可以...

    输入50个整数并计算出相加之和

    `: 声明了一个长整型变量`n`,用于累加输入的整数,并初始化为0。 ### 2. 控制台输入输出 #### 2.1 输出信息 - `Console.Out.WriteLine("请输入50个整数:")`: 向控制台输出提示信息。 - `Console.Out.WriteLine(...

    MFC实现大数相加 C++

    如果第一个字符串在任何位置上都小于第二个字符串,那么第一个数较小;如果第一个字符串在某个位置上大于第二个字符串,或者第二个字符串比第一个短,那么第一个数较大。在相加过程中,从低位到高位逐位进行,同时...

    数据结构的多项式相加的实现

    根据提供的文件信息,我们可以分析出该程序主要实现了多项式的表示、创建、遍历、排序以及两个多项式的相加等功能。接下来我们将对这些功能进行详细解释。 ### 一、多项式的链表表示 #### 1. 结构体定义 在代码中...

    示例--20221491115-方杨.zip

    在这个案例中,压缩包内有一个名为"20221491115方杨- 实验一长整型数操作"的文件,这暗示了我们可能在讨论一个关于计算机编程中的长整型数操作的教学实验。 长整型数(Long Integer)是编程语言中的一种数据类型,...

    动态申请空间实现矩阵加减法

    (5) 定义矩阵相加的函数,实现两个矩阵相加的功能,结果保存在另一个矩阵中; (6) 定义矩阵相减的函数,实现两个矩阵相减的功能,结果保存在另一个矩阵中; (7) 动态申请三个矩阵:A1、A2、A3; (8) 初始化A1...

    5-Java数组与方法

    例如,一个整型数组int[] numbers可以存储一系列的整数,如numbers[0], numbers[1], numbers[2]等。数组的长度在创建时必须指定,且一旦定义后不可改变,这被称为固定大小的数组。 创建数组主要有两种方式:静态...

    c语言实现的_两个大小相同的数组对应值相加 结果赋给第三个数组

    `:声明了`sum`函数,该函数接收三个整型数组指针和一个整型变量作为参数,并返回一个整型值。 - `void show_arr(const int ar[], int n);`:声明了`show_arr`函数,用于显示数组的内容。 3. **主函数**: - `...

    数据结构:长整数的加减法(任意长度的加减法).doc

    1. **存储结构**:利用链表实现长整数的存储,每个链表结点包含一个整型变量。由于C语言中的int类型有限制,所以每个节点仅能存储四位(如:千位、百位、十位、个位),通过连接多个节点来表示任意长度的整数。 2. *...

Global site tag (gtag.js) - Google Analytics