展会信息港展会大全

谁能给菜鸟讲讲高精度/高精度的算法?(不要程序,自然语言描述
来源:互联网   发布日期:2011-08-18 13:40:11   浏览:14721次  

导读: 高精度减法 ------------------------------------------------------------------------------ -- 1、和高精度加法相比,减法在差为负数时处理的细节更多一点:当被减数小于减数时,差 为负数,差的绝对值是减数减去被减数;在程序实现上用一个变量来存储符...

高精度减法

------------------------------------------------------------------------------
--


 

1、和高精度加法相比,减法在差为负数时处理的细节更多一点:当被减数小于减数时,差
为负数,差的绝对值是减数减去被减数;在程序实现上用一个变量来存储符号位,用另一
个数组存差的绝对值。

2、算法流程:

(1)读入被减数S1,S2(字符串);  
(2)置符号位:判断被减数是否大于减数:大则将符号位置为空;小则将符号位置为“-
”,交换减数与被减数;  
(3)被减数与减数处理成数值,放在数组中;  
(4)运算:  
    A、取数;  
B、判断是否需要借位;  
C、减,将运算结果放到差数组相应位中;  
D、判断是否运算完成:是,转5;不是,转A;  
(5)打印结果:符号位,第1位,循环处理第2到最后一位;  

3、细节:

▲如何判断被减数与减数的大小:字符串知识
(1)首先将两个字符串的位数补成一样(因为字符串的比较是从左边对齐的;两个字符串
一样长才能真正地比较出大小):短的在左边补0

          k1:=length(s1);
          k2:=length(s2);
          if   k1> k2   then   for   i:=1   to   k1-k2   do   s2:= '0 '+s2  
                            else   for   i:=1   to   k2-k1   do   s1:= '0 '+s1;  

(2)接着比较大小:直接比较字符串大小

          fh:= ' ';
          if   s1 <s2   then   begin   fh:= '- ';s:=s1;   s1:=s2;   s2:=s;   end;
                  {----s1存被减数,符号存符号}

▲将字符串处理成数值:

        l:=length(s1);{求出s1的长度,也即s1的位数;有关字符串的知识。}
          k1:=260;
          for   i:=l   downto   1   do
          begin
                    a[k1]:=ord(s1[i])-48;{将字符转成数值}
                    k1:=k1-1;  
          end;  
          k1:=k1+1;  

▲打印结果:
例:差:第一位是12,第二位是234,第三位是1234,最后一位:3。它的实际数值是1202
3412340003。
从上例可以看出:打印时,从第二位开始,因为每一段都代表4位,不足4位的要补足0。


write(fh,c[k]);{k是差的第1位;}
        for   i:=k+1   to   260   do
        begin  
                if   c[i] <1000   then   write( '0 ');
                if   c[i] <100   then   write( '0 ');
                if   c[i] <10   then   write( '0 ');
                write(c[i]);  
          end;  

赞助本站

人工智能实验室
AiLab云推荐
展开

热门栏目HotCates

Copyright © 2010-2024 AiLab Team. 人工智能实验室 版权所有    关于我们 | 联系我们 | 广告服务 | 公司动态 | 免责声明 | 隐私条款 | 工作机会 | 展会港