大数加法(利用数组实现)

#include<iostream>
#include<string>
using namespace std;

const int size = 50;

int main()
{
	string s1, s2;
	cin >> s1 >> s2;
	int len = (s1.length()>s2.length()) ? s1.length() : s2.length();

	int a1[size] = { 0 };
	int a2[size] = { 0 };
	int a3[size] = { 0 };

	//用数组储存两个大数
	for (int i = 0; i<s1.length(); i++)
		a1[i] = s1[i] - ‘0‘;
	for (int i = 0; i<s2.length(); i++)
		a2[i] = s2[i] - ‘0‘;

	//进位储存
	int carry = 0;

	//结果大数位数储存
	int j = 0;

	//逆序储存结果
	for (int i = len - 1; i >= 0; i--)
	{
		a3[j] = (a1[i] + a2[i] + carry) % 10;
		carry = (a1[i] + a2[i] + carry) / 10;
		j++;
	}

	if (carry != 0)
	{
		a3[j] = carry;
		j++;
	}

	//逆序
	for (int i = 0; i < j / 2; i++)
	{
		int temp = a3[i];
		a3[i] = a3[j - i - 1];
		a3[j - i - 1] = temp;
	}

	//输出
	for (int i = 0; i < j; i++)
		cout << a3[i];

	cout << endl;

	return 0;
}

  

时间: 2024-10-09 12:20:24

大数加法(利用数组实现)的相关文章

大数加法、减法、乘法

大数四则运算--C++实现 大数处理--c++实现 本课题来自我的c++编程作业,文章利用大数处理类,类名:hugeNumber来对大数(编译器自定义的数值类型无法处理的数)进行四则运算(大数加法.大数减法及大数乘法的运算,除暂时没实现)和按精度四舍五入,自定义科学计数法等.内容广泛涉及运算符重载.字符连接.字符加减和字符乘除等作者原创函数.重要提示:本文涉及的所有函数使用的进制皆为10进制.(备注:已将该博客搬迁至CSDN) 一.解题思路 1 核心思想 文章用hugeNumber类对大数进行操

NI笔试——大数加法

NI笔试: 1.找出字符串第一次出现的字符.用数组建立哈希表,然后再扫描字符串并判断次数是否为1. 2.大数加法,即字符串加法.因为之前写过乘法,就以为是乘法.然后就把乘法写上去了····= = 好了,看一下加法的思路. 要不要太简单,用俩数组,先把字符串每个位转换成数字存到这俩数组里,然后对每一位进行加和. 代码是拿别人的.= = void Add(char s1[],char s2[]) //需要两个字符串参数&&无返回值 { int num1[M],nm2[M]; int i,j;

c#大数加法

在C#中,我们经常需要表示整数.但是,c#的基本数据类型中,最大的long也只能表示-9,223,372,036,854,775,808 到 9,223,372,036,854,775,807之间的数.货币类型也不是无限大.如果我们需要表示更大的数,就需要用到一定的算法来完成. 这次,我和大家一起讨论一下c#的大数运算之加法. 这次,我们只考虑正数的整数加法. 我们的代码要封装到一个结构里面.这个结构的结构先摆出来. public struct BigInt { public int[] num

ACM~大数加法&amp;&amp;hdu题目样例

提出问题:为什么要提出大数的运算?(注java中有大数类,这里不再讲解,题目代码中略有java代码) 答案:因为计算机的数字类型是有限制的,例如int:2^32-1; long long 2^64-1;(以C++数据类型为例),因此在某些运算中需要高精度的运算,此时大数的模拟运算就应运而生了.这里只谈一下大数的加法,首先给出大整数的加法,再给出大实数的加法. 1.大整数加法的模拟,这里模拟小学生加法运算,用字符串储存大整数的数值. 首先看一下小学生的加法:987 + 345 = 1332 从个位

UVa 495【大数加法】

UVa 495 求第n位斐波那契数列,n<=5000. 还是大数问题,这次是大数加法.仿照UVa 623的解法来做.623位数可以一位一位的增,但是这个需要预先给够位数,要是按六位存一个数组元素里面的话,300位足够了,粗算一下n=5000大概有1044位,len=300*6足够存下了.就是不知道最后输出答案时我让pos初始为len为什么会WA,这个初始化对结果有影响? 1 #include<iostream> 2 #include<cstdio> 3 #define mod

HDU 1250 大数加法

Hat's Fibonacci Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 6948    Accepted Submission(s): 2285 Problem Description A Fibonacci sequence is calculated by adding the previous two members the

A + B Problem II(大数加法)

http://acm.hdu.edu.cn/showproblem.php?pid=1002 A + B Problem II Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 261608    Accepted Submission(s): 50625 Problem Description I have a very simple p

vector、string实现大数加法乘法

理解 vector 是一个容器,是一个数据集,里边装了很多个元素.与数组最大的不同是 vector 可以动态增长. 用 vector 实现大数运算的关键是,以 string 的方式读入一个大数,然后将字串的每一个字符 s[i] 以 int 形式赋给 vector<int> a 中的每一个元素.然后将 a[i] 和 a[j] 加起来(或者乘起来).每两个元素加起来的结果 <= 18,乘起来的结果 <= 81. 用 string 实现大数加法的方法跟 vector 差不多,但是用 st

练习题——大数加法

大数指位数超长的数,以至于使用int(32,64)等C++语言内置数据类型已经不足以涵盖. 这里实现1000位的大数加法. 思路为将数保存成字符数组/字符串形式,按位模拟手工计算时的加法, 主要步骤为: 1)获取原数和加数的位数 2)如果位数相同不做处理,位数不同,则需要将小的数前补0对齐到大的数 (如 101 + 99,需要将99前补0对齐到101, 变成101+ 099) 3)从后至前,从左至右,按位相加处理进位 4)若最左边发生了进位,则视为溢出的情况,此时需要将结果整体右移一位,在左边补

Java实现大数加法运算的几种方法

大数加法 思路一:定义String变量str1和str2分别存储输入的两个大数,定义num1[]和num2[]两个int型数组,将两个字符串分别逐个字符逆序存入数组,定义sum[]数组存放求和结果,使用循环两个数组中的元素逐位相加,并判断是否进位,最后逆序输出数组sum[]中的每个元素. 1 import java.util.Scanner; 2 3 public class largenumberOperationAdd { 4 public static void main(String[]