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. 

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

  • 相关阅读:
    谷歌将用QUIC传输层技术加速互联网
    无人自助洗车机漏洞
    什么是区块链,为什么它越来越受欢迎
    域名Whois数据和隐私是最大风险
    什么原因?全球许多网络提供商推迟部署IPv6
    FFT/NTT复习笔记&多项式&生成函数学习笔记Ⅱ
    C#中读写INI配置文件
    C#读取和导出EXCEL类库(可操作多个SHEET)
    Javascript刷新页面的几种方法
    用C#抓取AJAX页面的内容
  • 原文地址:https://www.cnblogs.com/yzm10/p/4753304.html
Copyright © 2011-2022 走看看