分享
 
 
 

高精度减法

王朝百科·作者佚名  2010-07-25
窄屏简体版  字體: |||超大  

高精度减法

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存被减数,符号存符号}

②通过数组分析完成大小比较(当数值长度超过256位时发挥重要作用)

readln(s);{输入整个算式,即'a+b='}

l1:=pos('-',s);(搜索'-'的位置)

for i:=1 to l1-1 do {从字符串中分离出数值A}

a[l1-i]:=ord(s[i])-48;

dec(l1);{将'-'号位置转换为数值A的长度}

x2:=length(s);{获取算式长度}

l2:=x2-l1-2;{得到数值B长度}

for i:=l1+2 to x2 do{将数值B分离出}

b[x2-i]:=ord(s[i])-48;

if l2>l1 then p:=true{开始分析数值AB的大小,如果B位数高则B更大}

else if l2=l1 then{如果相等则进入详细分析}

begin

i:=l1;

while (i>0)and(a[i]=b[i]) do dec(i);{从高到低依次检索AB每位的大小,如果有非等于则退出}

if a[i]<b[i] then p:=true;{最终判断数值AB的大小}

end;

▲将字符串处理成数值:

l:=length(s1);{求出s1的长度,也即s1的位数;有关字符串的知识。}

k1:=260;

for i:=l downto 1 do

begin

a[k1]:=ord(s1)-48;{将字符转成数值}

k1:=k1-1;

end;

k1:=k1+1;

▲打印结果:

例:差:第一位是12,第二位是234,第三位是1234,最后一位:3。它的实际数值是12023412340003。

从上例可以看出:打印时,从第二位开始,因为每一段都代表4位,不足4位的要补足0。

write(fh,c[k]);{k是差的第1位;}

for i:=k+1 to 260 do

begin

if c<1000 then write('0');

if c<100 then write('0');

if c<10 then write('0');

write(c);

end;

程序源代码:

{PASCAL}

Program a1;

var a,b,c:array [1..100] of integer;

x2,l1,l2,i:integer;

p:boolean;

s:string;

begin

readln(s);

l1:=pos('-',s);

for i:=1 to l1-1 do

a[l1-i]:=ord(s[i])-48;

dec(l1);

x2:=length(s);

l2:=x2-l1-2;

for i:=l1+2 to x2 do

b[x2-i]:=ord(s[i])-48;

if l2>l1 then p:=true

else if l2=l1 then

begin

i:=l1;

while (i>0)and(a[i]=b[i]) do dec(i);

if a[i]<b[i] then p:=true;

end;

if p then

begin

for i:=1 to l2 do c[i]:=b[i]-a[i];

for i:=1 to l2 do

if c[i]<0 then

begin

c[i]:=c[i]+10;

dec(c[i+1]);

end;

i:=l2;

while c[i]=0 do dec(i);

write('-');

for l2:=i downto 1 do write(c[i]);

writeln;

end

else

begin

for i:=1 to l1 do c[i]:=a[i]-b[i];

for i:=1 to l1 do

if c[i]<0 then

begin

c[i]:=c[i]+10;

dec(c[i+1]);

end;

i:=l1;

while c[i]=0 do dec(i);

for l1:=i downto 1 do write(c[i]);

writeln;

end;

end.

{水平不足之处请见谅}

#include<fstream>

#include<iostream>

#include<string.h>

using namespace std;

char a[1000]={0},b[1000]={0},d[1000],c[1000]={0};int l1,l2,k,i;

int main()

{

ifstream cin("1.txt",ios::in);

cin.getline(c,1000);

cin.getline(d,1000);

l1=strlen(c);l2=strlen(d);

for(i=0;i<l1;i++)

a[i]=c[l1-i-1]-'0';

for(i=0;i<l2;i++)

b[i]=d[l2-i-1]-'0';

if(l1>l2){k=l1;}else{k=l2;}

for(i=0;i<k;i++)

{

a[i]+=b[i];a[i+1]+=a[i]/10;a[i]%=10;

}

if(a[k]!=0) k++;

for(i=k-1;i>=0;i--)

{

a[i]+='0';

cout<<a[i];

}

cout<<endl;

system("pause");

}

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有