一、Description

The creators of a new programming language D++ have found out that whatever limit for SuperLongInt type they make, sometimes programmers need to operate even larger numbers. A limit of 1000 digits is so small... You have to find
the sum of two numbers with maximal size of 1.000.000 digits.

Input

The first line of an input file contains a single number N (1<=N<=1000000) - the length of the integers (in order to make their lengths equal, some leading zeroes can be added). It is followed by these integers written in columns.
That is, the next N lines contain two digits each, divided by a space. Each of the two given integers is not less than 1, and the length of their sum does not exceed N.

Output

Output file should contain exactly N digits in a single line representing the sum of these two integers.



二、问题分析



题目看了几遍,硬是没看懂。后来找到翻译,才知道题意,花了我老鼻子劲了。

问题:

一个新的程序语言D++的创造者发现不论如何设计超长整数的范围,有些时候程式设计师还是需要运算更大的数值。1000位的限制太小了,你现在要对两个长度最多有1000000位的整数做加法运算。

Input

输入的第一列有一个整数N,代表接下来有几组测试资料。

每一组测试资料的开头有一整数M(1<=M<=1000000),表示要相加的两个数的长度。为了令两个数字的长度相等,较短的数字开头会补上一连串的0。

接下来的M列每一列会有两个字元,以空白键作区格,要相加的两个数会以直行的方式表示。拿以下Sample Input为例,要相加的数值分别为4287+0​​463与098+372。

Output

对每一组输入印出相加后的结果,每个结果之间请空一行。

分析:1000000的大数相加,我们的整形是不能承受的。而且此题的数据非常强大,对时间的要求又很严格。由于输入是从高位到地位,因此我们从低位开始计算,并且我们就必须马上算出这个位元的和。又如果发生进位,则把进位值往上一位丢,但是我们不知道进位之后的前一位是否还会再发生进位,因此要一直往前追踪到没有进位发生为止,才能读入下一列的测资。以本题的测资量,若是打算将每一位元的和计算出来后才从最后一位开始往前寻找进位则会超过时间限制。因此仍然不能全部加完之后才处理进位,必须在发生进位时就要马上处理。用Java借此题是要注意用BufferedInputStream将输入读入字节数组。在这里要特别注意索引的值得变化以及'/r'
,'/n' 各占一个字节
。读取进来的字节用ASCII码表示,用于计算时要减48(0的Ascii码)。而输出则是输出字节数组,因此要加48转换成ASCII.

import java.io.BufferedInputStream;
import java.io.IOException; public class Main { public static void main(String[] args) throws NumberFormatException,IOException {
BufferedInputStream read = new BufferedInputStream(System.in);
byte[] b = new byte[5000000];
read.read(b);
String s = "";
int index = 0;
while (b[index] != '\r') {
s += (char) b[index];
index++;
}
int n = Integer.parseInt(s);
byte[] c = new byte[n];
for (int i = 0; i < n; i++) {
index++;
index++;
c[i] += b[index] - 48;
index++;
index++;
c[i] += b[index] - 48;
index++;
}
int cf = 0;
for (int i = n - 1; i >= 0; i--) {
c[i] += cf;
cf=c[i]/10;
c[i]=(byte)(c[i] %10 +48); }
System.out.write(c);
}
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

Poj 2602 Superlong sums(大数相加)的更多相关文章

  1. POJ 1503 Integer Inquiry(大数相加)

    一.Description One of the first users of BIT's new supercomputer was Chip Diller. He extended his exp ...

  2. Poj OpenJudge 百练 2602 Superlong sums

    1.Link: http://poj.org/problem?id=2602 http://bailian.openjudge.cn/practice/2602/ 2.Content: Superlo ...

  3. POJ 1503 Integer Inquiry(大数相加,java)

    题目 我要开始练习一些java的简单编程了^v^ import java.io.*; import java.util.*; import java.math.*; public class Main ...

  4. hdu acm-1047 Integer Inquiry(大数相加)

    Integer Inquiry Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)T ...

  5. UVa 424 Integer Inquiry 【大数相加】

    解题思路:因为给定的数据是多组,所以我们只需要多次做加法就可以了,将上一次的和又作为下一次加法运算的一个加数. 反思:还是题意理解不够清楚,最开始以为只是算三个大数相加,后来才发现是多个,然后注意到当 ...

  6. 用字符串模拟两个大数相加——java实现

    问题: 大数相加不能直接使用基本的int类型,因为int可以表示的整数有限,不能满足大数的要求.可以使用字符串来表示大数,模拟大数相加的过程. 思路: 1.反转两个字符串,便于从低位到高位相加和最高位 ...

  7. 随机数组&大数相加

    随机生成10个数,填充一个数组,然后用消息框显示数组内容,接着计算数组元素的和,将结果也显示在消息框中 一,      设计思路: 先生成随机数数组,再将数组保存在一个字符串中,然后将数组各数字加和, ...

  8. java-两个大数相加

    题目要求:用字符串模拟两个大数相加. 一.使用BigInteger类.BigDecimal类 public static void main(String[] args) { String a=&qu ...

  9. 杭电ACM(1002) -- A + B Problem II 大数相加 -提交通过

    杭电ACM(1002)大数相加 A + B Problem II Problem DescriptionI have a very simple problem for you. Given two ...

随机推荐

  1. WiX 中XML引用变量说明

    WiX 安装工程中的XML 文件所引用变量说明: The WiX project supports the following project reference variables: Variabl ...

  2. SDOI2017第一轮

    本蒟蒻表示终于$AC$了$SDOI2017\text{第一轮}$! 兴奋! 附上各个题的题解: $DAT1$: $T1$: BZOJ4816: [Sdoi2017]数字表格 $T2$: BZOJ481 ...

  3. Django 之 ORM 字段和字段参数

    ORM介绍 ORM概念 对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术. 简单的说,ORM是通过使用描述 ...

  4. iOS base64编码 MD5 加密

    //创建一个Base64编码的NSString对象 //字符串 转二进制 NSData *nsdata = [@"iOS Developer Tips encoded in Base64&q ...

  5. Sqlserver与Mysql触发器之间的差别

    今天练习sqlserver,一开始感觉应该像Oracle,Mysql语法差不多,但是经过一下午的奋战,才感觉原来这三个数据库就是有区别啊, 我原来学习触发器的时候用的是Mysql,感觉还行,但是今天采 ...

  6. DEV开发之界面皮肤

    最终效果:正文本人的环境是 VS2013+DEV 13.21.第一步,新建项目,(忽略)???2.修改Form1.cs的基类,Form修改为DevExpress.XtraBars.Ribbon.Rib ...

  7. python 3 mysql 索引原理与慢查询优化

    python 3 mysql 索引原理与慢查询优化 一 介绍 为何要有索引? 一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,在生产环境中,我们遇到最多的,也是最 ...

  8. P2487 [SDOI2011]拦截导弹

    题目 P2487 [SDOI2011]拦截导弹 做\(SDOI\)有种想评黑的感觉,果然还是太弱了 做法 独立写(调)代码三个小时祭 简化题目:求二维最长不上升子序列及每个点出现在最长不上升子序列概率 ...

  9. autoplay移动端不能自动播放

    本文总结自:https://stackoverflow.com/questions/12496144/can-you-autoplay-html5-videos-on-the-ipad 首先,自动播放 ...

  10. EntityFramework 学习 一 DbSet

    DBSet类表示一个实体的集合,用来创建.更新.删除.查询操作,DBSet<TEntity>是DBSet的泛型版本 你可以使用DbContext获取DBSet的引用,例如dbContext ...