zoukankan      html  css  js  c++  java
  • 洛谷1601 A+B Problem(高精) 解题报告

    洛谷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.输出结果。

    下面附上代码。

    代码

    1. var i,l1,l2:longint;  
    2.     a,b,c:array [1..502] of longint;  
    3.     ch:array [1..502] of char;  
    4. begin  
    5. repeat  
    6.   inc(l1);  
    7.   read(ch[l1]);  
    8. until eoln;  
    9. for i:=to l1 do a[i]:=ord(ch[l1-i+1])-48;  
    10. readln;  
    11. repeat  
    12.   inc(l2);  
    13.   read(ch[l2]);  
    14. until eoln;  
    15. for i:=to l2 do b[i]:=ord(ch[l2-i+1])-48;  
    16. if l1<l2 then l1:=l2;//加法运算要进行max(l1,l2)次,这里用l1保存运算次数  
    17. for i:=to l1 do  
    18. begin  
    19.   inc(c[i],a[i]+b[i]);//还要加上可能有的从低位进上来的值  
    20.   if c[i]>=10 then//进位  
    21.    begin  
    22.     dec(c[i],10);  
    23.     inc(c[i+1]);  
    24.    end;  
    25. end;  
    26. if c[l1+1]>then inc(l1);//检测最高位是否进位  
    27. for i:=l1 downto do write(c[i]);  
    28. end. 

    (本文系笔者原创,未经允许不得转载)

  • 相关阅读:
    165. Compare Version Numbers
    164. Maximum Gap
    3、桶排序
    162. Find Peak Element
    160. Intersection of Two Linked Lists
    155. Min Stack
    154. Find Minimum in Rotated Sorted Array II
    153. Find Minimum in Rotated Sorted Array
    Linux/Unix系统编程手册 第二章:基本概念
    Linux/Unix系统编程手册 第一章:历史和标准
  • 原文地址:https://www.cnblogs.com/yzm10/p/4753304.html
Copyright © 2011-2022 走看看