这个只能够用字符串的形式来处理了,因为计算机能够处理的最大是long型,本文以字符串的形式来进行超大数据的相加,理论上只要你的内存允许,相加多大的数都可以。
/**
* 超大整数相加:
* 题目要求:如果系统要使用超大整数(超过long的范围),请你设计一个数据结构来存储这种
* 超大型数字以及设计一种算法来实现超大整数的加法运算
* @author Administrator
*
*/
public class VeryBigNumAdd {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
/*
String a="1223232";
for(int i=a.length()-1;i>=0;i--)
{
System.out.print(a.charAt(i));
}
*/
VeryBigNumAdd vbn=new VeryBigNumAdd();
String a="123453243455535634535252345234677576252241234123523453664563634";
String b="123453243455535634535252345234677576252241234123523453664563634";
String result=vbn.doAdd(a,b);
System.out.println("result:"+result);
}
/**
*
* @param a 加数字符串1
* @param b 加数字符串2
* @return 结果字符串
* 分析:
* 1、取得两个字符串的长度
* 2、把两个的长度做比较,并得出较长的长度,及较短的长度
* 3、把长度较短的加数字符串,在左面补0,使之与较长的字符串一样长
* 4、从最高位,一个个数的取出来相加,当然首先得转换为整型
* 5、设置进位,如果两个数相加及加上进位大于等于10,并且这不是最左边一个字符相加,相加结果等于
* (取出1+取出2+进位)-10,并把进位设为1;如果没有大于10,就把进位设为0,如些循环,把
* 相加的结果以字符串的形式结合起来,就得到最后的结果
*/
String doAdd(String a,String b)
{
String str="";
int lenA=a.length();
int lenB=b.length();
int maxLen=(lenA>lenB) ? lenA : lenB;
int minLen=(lenA<lenB) ? lenA : lenB;
String strTmp="";
for(int i=maxLen-minLen;i>0;i--)
{
strTmp+="0";
}
//把长度调整到相同
if(maxLen==lenA)
{
b=strTmp+b;
}else
a=strTmp+a;
int JW=0;//进位
for(int i=maxLen-1;i>=0;i--)
{
int tempA=Integer.parseInt(String.valueOf(a.charAt(i)));
int tempB=Integer.parseInt(String.valueOf(b.charAt(i)));
int temp;
if(tempA+tempB+JW>=10 && i!=0)
{
temp=tempA+tempB+JW-10;
JW=1;
}
else
{
temp=tempA+tempB+JW;
JW=0;
}
str=String.valueOf(temp)+str;
}
return str;
}
}
分享到:
相关推荐
### 大整数相加源代码解析 #### 一、问题背景 在计算机科学与编程领域,处理大整数是一个常见的需求。对于超出标准整型数据类型范围的大整数进行运算,传统的方法如使用 `int` 或 `long long` 类型会显得力不从心...
在C语言中,标准库提供的数据类型如int、long或long long等,它们都有存储大小的限制,因此无法直接处理非常大的整数。但是,通过使用数组或链表来模拟大数,我们可以实现任意大的两整数相加减。下面我们将详细探讨...
在Java编程语言中,处理超大数(即超出标准`int`、`long`类型范围的数字)是一项挑战,因为这些内置数据类型无法容纳非常大的数值。为了应对这种需求,Java提供了`BigInteger`类,它是`java.math`包的一部分,能够...
超长整数相加的基本原理是使用数组来模拟多位数,每个数组元素存储一个数字位,然后按照常规的数学加法规则逐位进行计算。这里我们可以将其分为以下几个步骤: 1. **初始化**:创建两个数组,分别表示两个要相加的...
两个大整数相加类似于手动做加法,从低位到高位逐位相加,如果某位超过9,则需要进位。这可以通过双指针遍历两个大整数的位数组来实现。 ```c void addBigInt(BigInt* result, BigInt* a, BigInt* b) { // ... } `...
在C++编程语言中,处理大整数运算是一项挑战,因为标准库提供的`int`、`long`或`long long`等数据类型都有其存储和计算的限制。当需要进行超出这些类型范围的大整数运算时,我们通常需要自定义数据结构和算法。标题...
1. **加法运算**:两个大整数相加时,可以将它们的位数组对齐,然后从低位到高位逐位相加,如果某位相加大于9,则需要向高位进位。这个过程类似于笔算加法,但需要注意处理溢出,因为大整数可能超过单个元素的范围。...
当我们处理大整数时,标准整型变量(如int或long)可能会受限,无法存储超过一定范围的数值。在这种情况下,我们需要使用“长整数”或者“大整数”数据结构来实现对大整数的高效运算。本文将详细介绍长整数四则运算...
5. **相减**:相减操作与相加类似,只是整数部分做减法。 6. **相乘**:两个长整数相乘后,小数点位置需要移动的位数等于两者小数点位置之和。结果可能需要进行溢出检查。 7. **相除**:相除操作较为复杂,一般...
在C语言中实现超长整数的四则运算,是解决在常规数据类型如int、long等无法表示的超长整数运算问题的一种方法。由于常规数据类型有其存储和精度的限制,对于例如计算100阶乘这类计算精度要求非常高的问题,就需要...
在计算机科学中,长整数(Long Integer)是一种数据类型,用于表示比普通整数(如int或integer)更大的数值。这种数据类型的引入是为了解决标准整数类型在处理大范围数值时可能出现的溢出问题。在许多编程语言中,如...
当标准数据类型如int或long无法满足超过2^56的数值范围时,就需要设计自定义的数据结构和算法来存储和操作这些大整数。在C++和Java中,我们可以创建一个类来实现这种大整数,并通过运算符重载来提供与常规整数类似的...
在大多数编程语言中,如C、C++或Java,标准的数据类型如int和long只能表示一定范围内的整数,例如在32位系统中,int通常可表示-2^31到2^31-1之间的整数。当需要处理的数字超出这个范围时,我们需要使用更灵活的数据...
1.5.7. 输入一个表示整数的字符串,把该字符串转换成整数并输出.............. 118 1.5.8. 给出一个数列,找出其中最长的单调递减(或递增)子序列..............121 1.5.9. 四对括号可以有多少种匹配排列方式........
阶乘求和是指将一系列数字的阶乘相加得到的结果。在这个项目中,我们重点关注两个核心概念:阶乘和求和。 首先,让我们了解什么是阶乘。阶乘是一个数学运算,表示一个正整数n的所有小于等于n的正整数的乘积,表示为...
在计算机科学中,标准数据类型如`int`、`long`或`ulong`都有其存储限制,当处理的数字超出这些类型的表示范围时,我们需要采用特殊的方法来处理大整数。C语言虽然没有内置的大整数类型,但可以通过自定义数据结构和...
通过解析IPv4地址的每个部分,并将其按照特定权重相加得到一个整数。 **代码实现:** ```csharp /// /// 将IPv4地址转换为int表示 /// /// <param name="strIPAddress">IPv4地址 /// 整数表示的IP地址 public ...
在标准的计算机语言中,如C++,内置的数据类型如`int`和`long long`都有其存储和表示数字的上限,对于超出这个范围的大整数,我们需要使用特殊的数据结构和算法来处理。一种常见的解决方案是使用“大整数”类,这个...
在本项目"C++基础与深度解析--project2 长整数加法"中,我们主要探讨了如何在C++中实现对大整数的加法运算,这通常涉及到处理超过标准整数类型(如int,long等)所能表示的数值范围。下面将详细介绍这个项目中的关键...