• 洛谷2142 高精度减法 解题报告


    洛谷2142 高精度减法

    本题地址: http://www.luogu.org/problem/show?pid=2142

    题目描述

    高精度减法

    输入输出格式

    输入格式:

    两个数(第二个可能比第一个大)

    输出格式:

    结果(是负数要输出负号)

    输入输出样例

    输入样例#1:

    2
    1

    输出样例#1:

    1

    说明

    题解

    高精度

    高精度减法须按照如下步骤进行。

    1.输入和存储。

    2.计算结果的位数和正负:位数不会超过两数中较大的一个,判断结果的正负可以根据被减数和减数的大小进行判断。

    3.计算与错位处理。

    4.处理结果的位数并输出结果。因为程序开始将结果的位数初始化为较大数的位数,实际中结果的位数可能达不到,因此要算出结果的实际位数。

    下面附上代码。

    代码

    1. var i,l1,l2:longint;    
    2.     a,b,c:array [1..502] of longint;    
    3.     ch:array [1..502] of char;    
    4.     fan:boolean;    
    5. begin    
    6.  repeat//输入被减数,可以用array of char或ansistring储存    
    7.   inc(l1);    
    8.   read(ch[l1]);    
    9.  until eoln;    
    10.  for i:=to l1 do a[i]:=ord(ch[l1-i+1])-48;//转化为array of longint    
    11.  readln;    
    12.  repeat//对减数的处理同上    
    13.   inc(l2);    
    14.   read(ch[l2]);    
    15.  until eoln;    
    16.  for i:=to l2 do b[i]:=ord(ch[l2-i+1])-48;    
    17.  if (l1<l2) or (l1=l2) and (a[1]<b[1]) then//特殊情况:当差为负数时    
    18.   begin    
    19.    fan:=true;//负数标记为真,供后期判断是否输出负号    
    20.    //交换两个数,因为|a-b|=|b-a|,只需判断是否输出负号就行了    
    21.    for i:=to l1 do c[i]:=a[i];    
    22.    for i:=to l2 do a[i]:=b[i];    
    23.    fillchar(b,sizeof(b),0);    
    24.    for i:=to l1 do b[i]:=c[i];    
    25.    l1:=l2;//减法运算执行Max(Len1,Len2)次,这里用L1储存    
    26.   end;    
    27.  for i:=to l1 do    
    28.  begin    
    29.   c[i]:=a[i]-b[i];    
    30.   if (c[i]<0) and (i<l1) then//不是最高位时借位    
    31.    begin    
    32.     dec(a[i+1]);//注意这里要累减的不是c数组,应该是a数组    
    33.     inc(c[i],10);    
    34.    end;    
    35.  end;    
    36.  while c[l1]=do dec(l1);//找到最高的非0位    
    37.  if l1<=then//当差为0时,直接输出并退出    
    38.   begin    
    39.    writeln(0);    
    40.    halt;    
    41.   end;    
    42.  //输出差    
    43.  if fan then write('-');    
    44.  for i:=l1 downto do write(c[i]);    
    45. end.    

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

  • 相关阅读:
    NoSQL 数据库中的 CAP 理论
    JVM 相关概念
    Servlet 生命周期
    RabbitMQ
    消息队列概述
    05.类加载器深入解析及重要特性剖析
    LINUX笔记3(用户管理)
    LINUX笔记2(创建和编辑文本)
    修改httpd端口后,服务不能启动。
    LINUX笔记1(命令行和目录结构)
  • 原文地址:https://www.cnblogs.com/yzm10/p/4753324.html
Copyright © 2020-2023  润新知