zoukankan      html  css  js  c++  java
  • 高精度加法

    1.从键盘读入两个正整数,求它们的和。
    分析:从键盘读入两个数到两个变量中,然后用赋值语句求它们的和,输出。但是,我们知道,在pascal 语言中任何数据类型都有一定的表示范围。而当两个被加数据大时,上述算法显然不能求出精确解,因此我们需要寻求另外一种方法。在读小学时,我们做加法都采用竖式方法。 这样,我们方便写出两个整数相加的算法。
          A3 A2 A1
      +   B3 B2 B1
    -----------------
       C4 C3 C2 C1
    我们用数组A、B分别存储加数和被加数,用数组C 存储结果。
    因此,算法描述如下:
    procedure add(a,b;var c);
    { a,b,c 都为数组,a存储被加数,b 存储加数,c 存储结果 }
    var i,x:integer;
    begin
      i:=1;
      x:=0;
     while (i<=a 数组长度) or(i<=b 数组的长度) do 
    begin x := a[i] + b[i] + x div 10; {第i位相加并加上次的进位} c[i] := x mod 10; {存储第i 位的值} i := i + 1 {位置指针变量} end end; 通常,读入的两个整数用可用字符串来存储
     1 program exam1;
     2 const max=200;
     3 var a,b,c:array[1..max] of 0..9;
     4          n:string;
     5          lena,lenb,lenc,i,x:integer;
     6 begin
     7   readln(n);
     8   lena:=length(n); {加数放入a 数组}
     9    for i:=1 to lena do a[lena-i+1]:=ord(n[i])-ord(’0’);
    10   readln(n);
    11   lenb:=length(n); {被加数放入b数组}
    12    for i:=1 to lenb do b[lenb-i+1]:=ord(n[i])-ord(’0’);
    13   i:=1;
    14   x:=0;
    15   while (i<=lena) or(i<=lenb) do
    16   begin
    17     x := a[i] + b[i] + x div 10; {两数相加,然后加前次进位}
    18     c[i] := x mod 10; {保存第i 位的值}
    19     i := i + 1
    20   end;
    21  if x>=10 then {处理最高进位}
    22  begin lenc:=i;c[i]:=1; end
    23   else lenc:=i-1;
    24  for i:=lenc downto 1 do write(c[i]); {输出结果}
    25  writeln
    26 end.
  • 相关阅读:
    第03次作业-栈和队列
    第02次作业-线性表
    Data-Structure01-绪论
    c语言第二次实验报告
    C语言第一次实验报告
    KD-tree讲解
    AAAA、
    清北学堂 day one
    生长,开始记录!
    Linux命令(待完善)
  • 原文地址:https://www.cnblogs.com/vacation/p/5022159.html
Copyright © 2011-2022 走看看