`

大整数相加(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;
	

}

 

 

 

分享到:
评论

相关推荐

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

    java经典算法题例。参赛必做。 【程序14】  题目:两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找...

    任意正整数都能拆成若干唯一的2的幂指数之和

    任意正整数都能拆成若干唯一的2的幂指数之和,php版本和js版本都有。

    C++大学教程,一本适合初学者的入门教材(part2)

    1.16 简单程序:两个整数相加 1.17 内存的概念 1.18 算术运算 1.19 判断:相等与关系运算符 1.20 新型头文件与名字空间 1.21 有关对象的思考 小结 术语 自测练习 自测练习答案 练习 第2章 控制结构 2.1 简介 ...

    C++大学教程,一本适合初学者的入门教材(part1)

    1.16 简单程序:两个整数相加 1.17 内存的概念 1.18 算术运算 1.19 判断:相等与关系运算符 1.20 新型头文件与名字空间 1.21 有关对象的思考 小结 术语 自测练习 自测练习答案 练习 第2章 控制结构 2.1 简介 ...

    构造函数进行分数约分计算

    1类的构造和对象的是使用· 定义一个类Fact表示无符号有理数(分数),成员有分子(num)和分母(den) ...-两个分数相加,结果为不可约数(先通分,然后再约分) 定义testFact类,创建Fact对象,并调用各个方法

    leetcode285-leetcode:leetcode

    两数相加 中等 Java 3 无重复字符的最长子串 中等 Java 5 最长回文子串 中等 python 7 整数反转 简单 python 8 字符串转换整数(atoi) 中等 C++ 11 盛最多水的容器 中等 C++ 双指针法 :star: 15 三数之和 中等 C++ 17...

    leetcode寻找最近的-LeetCode:Leetcode解决方案及常用算法(Java&Python&Go)

    两数相加 t2 3 无重复字符的最长子串 t3 4 寻找两个正序数组的中位数 t4 5 最长回文子串 t5 6 Z 字形变换 t6 7 整数反转 t7 8 字符串转换整数 (atoi) t8 9 回文数 t9 10 正则表达式匹配 t10 11 盛最多水的容器 t11 ...

    达内 coreJava 习题答案

    System.out.println("请问要相加多少项?"); howMany = scanner.nextInt(); int sum=0; int a1=a; // 用来保存 a 的初始值 for (int i=1; i; i++){ sum+= a; a = 10*a +a1; // 这表示a 的下一项 // 每次 a ...

    leetcode18java-Leet:我对LeetCode挑战问题的解决方案。语言因问题而异

    两个数字相加 中等的 Java 3. 无重复字符的最长子串 中等的 C++ 4. 两个有序数组的中位数 难的 Python2 5. 最长回文子串 中等的 C 6. 之字形转换 中等的 Javascript 7. 反转整数 简单的 C# 8. 字符串到整数 (atoi) ...

    C++大学教程

    1.16 简单程序:两个整数相加-------------------------------------------15 1.17 内存的概念-------------------------------------------------------18 1.18 算术运算------------------------------------...

    删除无效括号leetcodeJava-ZY-LeetCode:zy的leetcode解决方案

    C++ C Java Python 数组拆分 I E 2018-3-16 北京 Y 两数之和 E 2018-5-29 北京 Y 两数相加 M 2018-5-30 北京 Y 反转整数 E 2018-5-31 北京 Y 回文数 E 2018-6-3 北京 Y 删除链表的倒数第N个节点 M 2018-6-3 北京 Y ...

    任意输入一个偶数n(n>4),请将它分解为两个素数之和。

    任意输入一个偶数n(n&gt;4),请将它分解为两个素数之和。

    leetcode2sumc-leetcode:我在LeetCode上解决的所有问题的集合

    C++ Python Java 博客 1 二和 2 两个数字相加 3 无重复字符的最长子串 4 两个有序数组的中位数 5 最长回文子串 6 之字形转换 7 反转整数 8 字符串到整数 (atoi) 9 回文数 10 正则表达式匹配 11 盛水最多的容器 12 ...

    javalruleetcode-leetcode-solutions:leetcode-解决方案

    java lru leetcode My solutions of LeetCode exercises 算法-简体 | 类名解释 名为 MySolution 的类是我自己苦思冥想、搜肠刮肚、磕巴磕巴写出来的,而名为 Solution(或者带有数字)的则是灰心丧气、万念俱灰、自...

    leetcode2sumc-LeetCode:LeetCode问题集(算法)

    给定一个整数数组,返回两个数字的索引,使它们相加为特定的target 。 您可以假设每个输入都只有一个解决方案。 例子: Given nums = [2, 7, 11, 15], target = 9, Because nums[0] + nums[1] = 2 + 7 = 9, return ...

    gasstationleetcode-leetcode:这是为了记录

    C++ 解决方案。 2 月 11 日更新:我开始添加 Java 解决方案。 对于 EXPEDIA! 8 月 16 日更新:我继续我的工作。 为了娱乐。 # 标题 解决方案 0 ----- 1 二和 2 两个数字相加 3 无重复字符的最长子串 5 最长回文子串...

    leetcode1004-Leetcode:Leetcode问题-2021

    Java JS 1. 二和 :green_circle: 数组、哈希表 ✓ ✓ 2. 两个数相加 :orange_circle: 链表 ✓ 7. 反转整数 :green_circle: 数学 ✓ ✓ 12.整数转罗马 :orange_circle: 数学字符串 ✓ 13.罗马到整数 :green_circle: ...

    C#微软培训资料

    18.2 在 C #代码中调用 C++和 VB 编写的组件 .240 18.3 版 本 控 制 .249 18.4 代 码 优 化 .252 18.5 小 结 .254 第五部分 附 录 .255 附录 A 关 键 字.255 附录 B 错 误 码.256 附录 C .Net 名字空间...

    国信蓝桥试题算法

     (Java组代码填空)有n个孩子站成一圈,从第一个孩子开始顺时针方向报数,报到3的人出列,下一个人继续从1报数,直到最后剩下一个孩子为止。问剩下第几个孩子。下面的程序以10个孩子为例,模拟了这个过程,请完善...

Global site tag (gtag.js) - Google Analytics