• 微软原版系统

  • 一键重装系统

  • 纯净系统

  • 在线技术客服

魔法猪系统重装大师 一键在线制作启动 U 盘 PE 系统 用一键重装的魔法拯救失去灵魂的系统
当前位置:首页 > 教程 > 电脑教程

Pascal高精度减法什么是高精度算法?

时间:2015年04月02日 15:34:00    来源:魔法猪系统重装大师官网    人气:14729
先来看一下什么是高精度算法:
高精度算法,属于处理大数字的数学计算方法。在一般的科学计算中,会经常算到小数点后几百位或者更多,当然也可能是几千亿几百亿的大数字。一般这类数字我们统称为高精度数,高精度算法是用计算机对于超大数据的一种模拟加,减,乘,除,乘方,阶乘,开方等运算。对于非常庞大的数字无法在计算机中正常存储,于是,将这个数字拆开,拆成一位一位的,或者是四位四位的存储到一个数组中, 用一个数组去表示一个数字,这样这个数字就被称谓是高精度数。高精度算法就是能处理高精度数各种运算的算法。此处我们主要讲解高精度减法。

如何从读入的算式中提取减数和被减数:
先介绍一下高精度减法的实现过程:先读入一个算式,提取出里面的被减数和减数,我们可以通过Copy函数来实现。

具体代码如下:

Readln(Suanshi);
Len:=Length(Suanshi);
For i:=1 to length(Suanshi) Do
Begin
IF Suanshi[i]='-' Then
Begin
x:=Copy(Suanshi,Tmp,i-tmp);
Tmp:=i+1;
y:=Copy(Suanshi,Tmp,len-tmp+1);

Break;
End;

这里很简单,不需要多说。

如何将字符串转换为整数数组?
要想将字符串转换为整数数组,只需要一个For循环就可以解决了,先获得String的长度,然后循环就OK了。(注意:因为我们的减法运算是从右到左的,所以要把转换过程稍微改一下)

具体代码如下:

For i:=1 to Length(x) do
a[i]:=ord(x[length(x)-i+1])-ord('0');

怎么样?很短吧!

如何判断两个数的大小?
由于该问题比较简单,不做详细介绍,只要用补零法,然后判断即可。

给个补零的函数:

Function BuLing(a,b:String):String;
Var i:Longint;
Begin
While length(a)<>Length(b) Do Insert('0',a,1);
Buling:=a
End;

在运算时,如何处理借位问题?
只需要判断a[i]是否小于b[i]如果小于的话,Dec(a[i+1]),a[i]+10,然后再减b[i]即可。

代码比较简单,请大家自己发挥。

至于那些比较简单的,如输入输出,就不再讲了,注意:输出时要注意判断最高位是不是0,然后在输出。

下面给出所有的代码,如有不足之处,请指出:

Program Jianfa;
Type ArryType=Array[1..10000] of Integer;
Var x,y,Suanshi:String;
Var Flag:Char;
Var a,b:array[1..10000] of Integer;
Var i,j,len,k,tmp:Longint;
Function BuLing(a,b:String):String;
Var i:Longint;
Begin
While length(a)<>Length(b) Do Insert('0',a,1);
Buling:=a
End;
Begin
Fillchar(a,sizeof(a),0);
Fillchar(b,sizeof(b),0);
Flag:='+';
Tmp:=1;
Readln(Suanshi);
Len:=Length(Suanshi);
For i:=1 to length(Suanshi) Do
Begin
IF Suanshi[i]='-' Then
Begin
x:=Copy(Suanshi,Tmp,i-tmp);
Tmp:=i+1;
y:=Copy(Suanshi,Tmp,len-tmp+1);
End;
End;
IF Length(x)Else y:=Buling(y,x);
For i:=1 to Len do
IF x[i]Begin
Flag:='-';
Break;
End
Else Break;
IF Flag='+' Then
Begin
For i:=1 to Length(x) do
a[i]:=ord(x[length(x)-i+1])-ord('0');
For i:=1 to Length(y) do
b[i]:=ord(y[length(y)-i+1])-ord('0');
End
Else
Begin
For i:=1 to Length(y) do
a[i]:=ord(y[length(y)-i+1])-ord('0');
For i:=1 to Length(x) do
b[i]:=ord(x[length(x)-i+1])-ord('0');
End;
IF Length(x)Len:=Length(y)
Else
Len:=Length(x);
For i:=1 to len do
Begin
IF a[i]Begin
Dec(a[i+1]);
a[i]:=a[i]+10;
End;
a[i]:=a[i]-b[i];
End;
While a[len]=0 Do Dec(Len);
Write(Flag);
For i:=len downto 1 do Write(a[i]);
Readln;
End.
PS:下面的隐藏内容,想看的就看(选中即可)
Pascal,高精度,减法,什么,是,算法,先来,看一下,
栏目:电脑教程 阅读:1000 2023/12/27
Win7教程 更多>>
U盘教程 更多>>
Win10教程 更多>>
魔法猪学院 更多>>

Copyright © 2015-2023 魔法猪 魔法猪系统重装大师

本站发布的系统仅为个人学习测试使用,请在下载后24小时内删除,不得用于任何商业用途,否则后果自负,请支持购买微软正版软件。

在线客服 查看微信 返回顶部