洛谷1601 A+B Problem(高精) 解题报告
2015-08-23 21:57
169 查看
洛谷1601 A+B Problem(高精)
本题地址: http://www.luogu.org/problem/show?pid=1601题目背景
无题目描述
高精度加法,x相当于a+b problem,不用考虑负数输入输出格式
输入格式:分两行输入a,b<=10^500
输出格式:
输出只有一行,代表A+B的值
输入输出样例
输入样例#1:1 1
输出样例#1:
2
题解
高精度题目非常简单,但数据规模却非常大,显然是常规数据类型无法承受的,因此不能用普通做法来完成这道题。
我们可以借助高精度。高精度运算实际上是运用了模拟的思想,对现实数学竖式运算的过程进行了模拟。
因此,我们可以用数组来存储一个大规模数据,并对其运算,数组的运算规则如同算术的竖式运算(注意相加进位),步骤如下:
1.求出和的最小可能位数。
2.从低位到高位,逐位相加。
3.从低位到高位处理进位,满十进一。
4.处理最高位的进位。
5.输出结果。
下面附上代码。
代码
var i,l1,l2:longint;a,b,c:array [1..502] of longint;
ch:array [1..502] of char;
begin
repeat
inc(l1);
read(ch[l1]);
until eoln;
for i:=1 to l1 do a[i]:=ord(ch[l1-i+1])-48;
readln;
repeat
inc(l2);
read(ch[l2]);
until eoln;
for i:=1 to l2 do b[i]:=ord(ch[l2-i+1])-48;
if l1<l2 then l1:=l2;//加法运算要进行max(l1,l2)次,这里用l1保存运算次数
for i:=1 to l1 do
begin
inc(c[i],a[i]+b[i]);//还要加上可能有的从低位进上来的值
if c[i]>=10 then//进位
begin
dec(c[i],10);
inc(c[i+1]);
end;
end;
if c[l1+1]>0 then inc(l1);//检测最高位是否进位
for i:=l1 downto 1 do write(c[i]);
end.
(本文系笔者原创,未经允许不得转载)
相关文章推荐
- Cocos2d-x 3.3版本及以上版本CCPointZero的改变
- 黑马程序员—学习笔记4-PrintStream
- Java技术资料
- Collection 和 Collections的区别
- __main() 和 main()
- 华为数字芯片实习面试经过
- IFS的值和简单实例
- java基础和面向对象
- c& c++笔试题
- MFC中持久化的实现
- 【POJ3660】【传递闭包】【能确定胜负的含义 +- = n-1】
- Python菜鸟晋级12----多线程
- printk
- windows下安装pysqlcipher模块
- HDU_1698 Just a Hook(线段树+lazy标记)
- selenium2 webdriver要点理解
- How Many Maos Does the Guanxi Worth
- POJ 1273 Drainage Ditches(dinic模板)
- Hashtable 和 HashMap之间的区别
- Makefile自动变量