模拟--大数加法

问题描述

  在C/C++语言中,整型所能表示的范围一般为-231到231(大约21亿),即使long long型,一般也只能表示到-263到263。要想计算更加规模的数,就要用软件来扩展了,比如用数组或字符串来模拟更多规模的数及共运算。
  现在输入两个整数,请输出它们的和。

输入格式

  两行,每行一个整数,每个整数不超过1000位

输出格式

  一行,两个整数的和。

样例输入

15464315464465465
482321654151

样例输出

15464797786119616

数据规模和约定

  每个整数不超过1000位

 1 #include <iostream>
 2 #include <cmath>
 3 using namespace std;
 4 int main()
 5 {
 6     string a;
 7     string b;
 8     int flag;
 9     int max;
10     int len;
11     int c[1001]={0};
12     int e[1001];
13     int d[1001];
14     cin>>a;
15     cin>>b;
16     for(int i=0,l=a.length()-1;i<a.length();)
17     e[l--]=a[i++]-‘0‘;
18     for(int j=0,m=b.length() -1;j<b.length();)
19     d[m--]=b[j++]-‘0‘;
20 /*    for(int k=0;k<a.length();k++)
21     {
22         cout<<e[k];
23     }
24     cout<<endl;
25
26     for(int k=0;k<b.length();k++)
27     {
28         cout<<d[k];
29     }*/
30
31     if(a.length()>b.length())
32     {
33         len=b.length();
34         flag=1;
35         max=a.length();
36
37     }
38     else
39     {
40     len=a.length();
41     flag=0;
42     max=b.length();
43     }
44     for(int k=0;k<len;k++)
45     {
46         c[k]=c[k]+e[k]+d[k];
47         if(c[k]>=10)
48         {
49             c[k]=c[k]%10;
50             c[k+1]=1;
51         }
52     }
53     if(flag==0)
54     {
55         for(int k=len;k<b.length();k++)
56         {
57             c[k]=d[k]+c[k];
58         }
59     }
60     else
61     {
62         for(int k=len;k<a.length();k++)
63         {
64             c[k]=e[k]+c[k];
65         }
66     }
67     //if(len=max&&c[len]==1)cout<<1;
68     for(int u=max-1;u>=0;u--)
69     {
70         cout<<c[u];
71     }
72     return 0;
73 }
74
75
76 90分    没有通过的数据是 89 89 178 

原文地址:https://www.cnblogs.com/jweie/p/8378181.html

时间: 2024-10-14 19:42:34

模拟--大数加法的相关文章

hdu1047(模拟大数循环相加)

题目信息:多个大整数相加求和,(用add函数循环相加) http://acm.hdu.edu.cn/showproblem.php?pid=1047 AC代码: /** *大数的循环加法,转化为字符串循环相加到字符串为"0" *注意s=="0"的情况,输出数据之间有空格 */ #include<iostream> #include<string> #include<cstdio> using namespace std; stri

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

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

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

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

练习题——大数加法

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

题解报告:hdu 1002 A + B Problem II(大数加法)

Problem Description I have a very simple problem for you. Given two integers A and B, your job is to calculate the Sum of A + B. Input The first line of the input contains an integer T(1<=T<=20) which means the number of test cases. Then T lines fol

C语言 &#183; 大数加法

算法提高 大数加法 时间限制:1.0s   内存限制:256.0MB 问题描述 输入两个正整数a,b,输出a+b的值. 输入格式 两行,第一行a,第二行b.a和b的长度均小于1000位. 输出格式 一行,a+b的值. 样例输入 42 样例输出 6 1 #include<stdio.h> 2 #include<string.h> 3 int main() 4 { 5 char a[1001],b[1001]; 6 int s[1001],d[1001]; 7 scanf("

NI笔试——大数加法

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

大数加法、乘法

1 #include<iostream> 2 3 #include<stdio.h> 4 5 #include<string.h> 6 7 #define Len 3000//大数的长度 8 9 using namespace std; 10 11 int Input (char n[])//将大数读入的函数 12 13 { 14 15 char s[Len]; 16 17 int i,l; 18 19 20 21 for(i=0; i<Len; i++) n[i