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.
  • 相关阅读:
    Java实现 LeetCode 343 整数拆分(动态规划入门经典)
    Java实现 LeetCode 342 4的幂
    Java实现 LeetCode 342 4的幂
    Java实现 LeetCode 342 4的幂
    Java实现 LeetCode 341 扁平化嵌套列表迭代器
    Java实现 LeetCode 341 扁平化嵌套列表迭代器
    Java实现 LeetCode 341 扁平化嵌套列表迭代器
    Java实现 LeetCode 338 比特位计数
    H264(NAL简介与I帧判断)
    分享一段H264视频和AAC音频的RTP封包代码
  • 原文地址:https://www.cnblogs.com/vacation/p/5022159.html
Copyright © 2011-2022 走看看