zoukankan      html  css  js  c++  java
  • 洛谷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.    

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

  • 相关阅读:
    Java对象的生命周期与作用域的讨论(转)
    [置顶] Oracle学习路线与方法
    Java实现 蓝桥杯 算法训练 未名湖边的烦恼
    Java实现 蓝桥杯 算法训练 未名湖边的烦恼
    Java实现 蓝桥杯 算法训练 未名湖边的烦恼
    Java实现 蓝桥杯 算法训练 最大的算式
    Java实现 蓝桥杯 算法训练 最大的算式
    Java实现 蓝桥杯 算法训练 最大的算式
    Java实现 蓝桥杯 算法训练 最大的算式
    Java实现 蓝桥杯 算法训练 最大的算式
  • 原文地址:https://www.cnblogs.com/yzm10/p/4753324.html
Copyright © 2011-2022 走看看