`

大整数相加(java VS c++实现)

 
阅读更多

大整数相加

    整体思想都是补零,如a:123,b:1,补零后a:123, b:001然后相加进位

java是前补零

c++是将数从个位存,剩下的默认为0

java实现

import java.math.BigInteger;

public class Q2 {

	/*
	 * 两大数相加。
	 */
	/*
	 * 方法一:
	 * 用java.math.BigInteger类
	 * 注:必须是正整数相加 
	 */
	public String m1(String a, String b){
		BigInteger big1 = new BigInteger(a);
		BigInteger big2 = new BigInteger(b);
		return big1.add(big2).toString();
	}
	/*
	 * 方法二:
	 */
	public String m2(String a, String b){
		int len1 = a.length();
		int len2 = b.length();
		int len = len1;
		if(len1 > len2){
			for(int i = 0; i < len1 - len2; i ++){
				b = '0' + b;
			}
			len = len1;
		}else if(len1 < len2){
			for(int i = 0; i < len2 - len1; i ++){
				a = '0' + a;
			}
			len = len2;
		}
		int c[] = new int[len];
		int a1, b1;
		int temp = 0;
		String s = "";
		for(int i = len - 1; i >= 0; i --){
			//char转为int
			a1 = Integer.valueOf(a.charAt(i)) - 48;
			//法二:char转为int
			//a1 = a.charAt(i) - '0';
			b1 = Integer.valueOf(b.charAt(i)) - 48;
			
			c[i] = (a1 + b1 + temp) % 10;
			temp = (a1 + b1 + temp) / 10;

			s = String.valueOf(c[i]) + s;

		}
		
		return s;
	}
	public static void main(String[] args){
		
		Q2 q2 = new Q2();
		String a = "99999999999999999999999999";
		String b = "11111111111111111111111111111";
		String s = q2.m1(a, b);
		System.out.println(s);
		String c = q2.m2(a, b);
		System.out.println(c);

	}
}

 C++实现

#include<iostream>
using namespace std;

void main(){
	char a[201], b[201];
	int a1[201], b1[201];
	memset(a1, 0, sizeof(a1));
	memset(b1, 0, sizeof(b1));
	cin >> a >> b;
	int len1 = strlen(a);
	int len2 = strlen(b);
	int len = len1 > len2 ? len1 : len2;
	int j = 0;
	for(int i = len1 - 1; i >= 0; i --){
		a1[j ++] = a[i] - '0';//a1从个位开始存放
	}
	j = 0;
	for(i = len2 - 1; i >= 0; i --){
		b1[j ++] = b[i] - '0';
	}

	int n = 0; //n表示进位
	int temp;
	for(i = 0; i < len; i ++){
		temp = a1[i] + b1[i] + n;
		a1[i] = temp % 10;
		n = temp / 10;
	}
	if(n != 0){//表示最高位相加后的进位
		cout << n;
	}
	for(i = len - 1; i >= 0; i --){//从高位开始输出
		cout << a1[i];
	}
	cout << endl;
	

}

 

 

 

分享到:
评论

相关推荐

    大整数相加,计算两个非负整数的和,可以精确计算2的100次方

    大整数相加的实现通常涉及到以下技术点: 1. **大整数表示**:大整数通常用数组或链表等数据结构存储,每个元素代表一个数字位。例如,可以用一个数组存储2的100次方,该值有30个十进制位,远远超过了普通整型所能...

    NJUCM-数据结构课程1.实验一 顺序表的实现,大整数相加.zip

    顺序表的实现”可能是实现顺序表的源代码文件,你需要在此基础上完成大整数相加的功能。 在这个实验中,你不仅能深入理解顺序表这一基础数据结构,还能锻炼到大整数操作的能力,这对于进一步学习高级数据结构和算法...

    大整数加法减法 完整算法 写一个表示大整数(>2256)的对象( C++或Java),能实现 +,-,*,/(运算符重载)(

    本篇文章将重点讨论大整数的加法和减法算法,并演示如何在Java中通过运算符重载来实现这些功能。 首先,我们创建一个名为`Bigint`的类,它包含两个成员变量`op1`和`op2`,分别用于存储两个大整数的字符串表示,以及...

    写一个表示大整数(>2256)的对象( C++或Java),能实现 +,-,*,/(运算符重载)(

    2. 加法:两个大整数相加,可以从前向后逐位相加,同时考虑进位。类似于小学生做的竖式加法,从低位到高位逐位相加,若有进位,则传递给下一位。 3. 减法:减法类似,但需要处理借位。可以将减数转换为它的补数(加...

    c++ 代码实现 dll 工程 用于java jna调用

    本教程将详述如何使用C++编写DLL动态链接库,并通过Java的Java Native Access (JNA)库进行调用,从而实现Java程序对C++功能的调用。 首先,我们需要了解DLL是什么。DLL(Dynamic Link Library)是Windows操作系统中...

    最简单的JNI编程-实现两个数相加

    通过这种方式,我们完成了JNI的基本流程,实现了两个整数的相加。在实际应用中,JNI常用于高性能计算、硬件交互、调用操作系统API等场景。需要注意的是,过度使用JNI可能会增加程序的复杂性和维护成本,因为它引入了...

    大整数加法(理论无限位)

    而在C++、Java等语言中,可以使用特定的库(如GMP for C++,BigInteger for Java)来实现大整数的运算。 总结来说,大整数加法是计算机科学中一个基础但重要的部分,它不仅涉及到算法设计和优化,还与多种实际应用...

    大整数问题

    在计算机科学中,大整数(Big Integer)是指超过...然而,实际的高性能大整数库,如Java的`BigInteger`或C++的GMP(GNU Multiple Precision Arithmetic Library),通常会使用更高效的数据结构和算法来优化这些操作。

    大整数相乘算法 分治法

    在大多数编程语言中,如C++,整数类型(如`unsigned long`)都有其最大值限制,一旦超过这个限制,就无法正确表示大整数的乘积。因此,对于大整数乘法,需要设计特殊的算法来解决。 本算法采用分治法(Divide and ...

    无限大整数类

    在Java、C++、Python等语言中,都有内置的大整数支持,但在一些低级别或特定场景下,开发者可能需要自定义实现这种类来满足需求。本主题将详细介绍如何使用链表结构来实现无限大整数的加减运算。 首先,我们需要...

    ACM计算两整数相加的多语言代码示例与注解

    内容概要:提供了基于不同编程语言的一个简单的 ACN(以计算两个整数的和为例)源代码,涉及三种语言:C++, Java 和 Python。每个示例都包含了详细的步骤来演示用户输入是如何接收和进行运算以及结果显示出来的。 ...

    BigNum大整数的运算

    在实际编程中,有很多现成的大整数库可以使用,例如Java的BigInteger类,Python的内置decimal模块,C++的GMP库等。这些库提供了丰富的接口,可以方便地进行大整数的运算,并且已经优化了性能,避免了重复造轮子的...

    蓝点被必做的算法经典题java.c/c++

    - **目标**: 实现二分查找算法,判断一个整数是否存在于给定的整数数组中。 - **程序分析**: - 二分查找要求数组事先排序。 - 从数组的中间元素开始比较,缩小搜索范围。 - 如果中间元素大于目标值,则在左半部分...

    任意大的两数相加,输出其和

    为了处理任意大小的整数,我们需要使用特殊的类型或库,例如Java的BigInteger类,Python的内置int类型(在Python 3中可以无限制地表示大整数),或者C++中的第三方库如GMP(GNU Multiple Precision Arithmetic ...

    整数类型范例 有小数位

    例如,将一个大整数与一个小浮点数相加,可能会导致整数部分被截断。 6. **编程范例**:压缩文件中的"整数类型范例"可能包含了一些演示如何处理带小数位的数值的代码实例。这些例子可能包括浮点数到整数的转换、舍...

    长整数加减法运算 双向链表

    在常规的编程语言中,如C、C++或Java,整型变量(int)通常只能存储一定范围内的整数值。当需要处理超出这个范围的大整数时,例如处理百万位或更多位的数字,就需要用到长整数。长整数可以由多个基本整数类型组成,...

    长整数计算器——帮您快捷地进行百、千、万位数的四则计算

    常规的整型类型,如C++中的`int`或Java中的`int`,通常只能存储一定范围内的整数,例如,32位系统下的`int`通常可存储-2^31到2^31-1的整数。然而,当需要处理百万、千万甚至更大位数的数字时,就需要使用专门的数据...

    java调用c语言

    // 传入两个int型的整数并做相加 public native int combineStr(int a, int b); // 传入两个String类型的字符串,处理后返回一个布尔类型的值 public native boolean showboolean(String name, String password)...

    常见的java基础考题

    Java接口和C++虚类在概念上有相似之处,但实现方式不同。Java接口是一种完全抽象的类型,它不能包含实例变量,只能定义公共方法(默认为public)和常量(默认为public static final)。一个类可以实现多个接口,从而...

    jisuanqi.rar_长整数计算

    在标准的编程语言中,如C、C++、Java等,整型变量通常有固定的大小,如32位或64位,这限制了它们能表示的最大整数值。例如,32位整数最大只能表示2^31 - 1(约21亿),对于需要处理更大整数的应用来说是不够的。因此...

Global site tag (gtag.js) - Google Analytics