Pascal高精度加法(附N-S流程图)

本文介绍了一种高精度加法算法的实现方法,通过字符串转整数数组、加法运算及进位处理等步骤完成两个大数相加。文章提供了Pascal语言的示例代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最基本的高精度的加法思路还是比较容易想到的,不过该算法要考虑的地方还是比较多的,比如:
  • 字符倒置
  • 加法运算时的进位
  • 多余数字的处理
  • 运算后数字的长度
下面给出其算法N-S流程图:
高精度加法N-S流程图
Pascal代码:
  1. program p1039;
  2. type
  3.     intarray = array[1..251of byte;
  4. var
  5.     s1,s2:string[250];
  6.     code,len:integer;
  7.     a,b,res:intarray;
  8. { * 转置并转换为整数数组 * }
  9. procedure revolve(var inta:intarray; s:string[250]);
  10. var
  11.     i,tmp:byte;
  12. begin
  13.     tmp:=length(s);
  14.     for i:=1 to tmp do
  15.         val(copy(s,tmp-i+1,1),inta[i],code);
  16. end;
  17. { * 处理多余数字 * }
  18. procedure remain(lmin,lmax,x:byte;which:intarray);
  19. var
  20.     i:byte;
  21. begin
  22.     for i:=lmin+1 to lmax do
  23.     begin
  24.         res[i]:=(which[i]+x) mod 10;
  25.         x:=(which[i]+x) div 10;
  26.         len:=i
  27.     end;
  28.     if x>0 then
  29.     begin
  30.         len:=len+1;
  31.         res[len]:=x;
  32.     end;
  33. end;
  34. { * 加法,并处理多余数字 * }
  35. procedure addx();
  36. var
  37.     i,lena,lenb,x:byte;
  38. begin
  39.     lena:=length(s1);
  40.     lenb:=length(s2);
  41.     if lena>lenb then
  42.         len:=lenb
  43.     else
  44.         len:=lena;
  45.     x:=0;
  46.     for i:=1 to len do
  47.     begin
  48.         res[i]:=(a[i]+b[i]+x) mod 10;
  49.         x:=(a[i]+b[i]+x) div 10
  50.     end;
  51.     if lena>lenb then
  52.         remain(lenb,lena,x,a);
  53.     if lena<lenb then
  54.         remain(lena,lenb,x,b);
  55.     if (lena=lenb) and (x>0then
  56.     begin
  57.         len:=len+1;
  58.         res[len]:=x;
  59.     end;
  60. end;
  61. { * 反向输出 * }
  62. procedure print();
  63. var
  64.     i:byte;
  65. begin
  66.     for i:=len downto 1 do
  67.         write(res[i]);
  68.     writeln;
  69. end;
  70. { * main * }
  71. begin
  72.     readln(s1);
  73.     readln(s2);
  74.     revolve(a,s1);
  75.     revolve(b,s2);
  76.     addx();
  77.     print();
  78. end.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值