大整数减法
发布网友
发布时间:2022-05-30 19:00
我来回答
共2个回答
热心网友
时间:2023-11-01 10:40
我下面的程序在TURBO PASCAL上调试通过,我写了一个过程来完成减法运算并输出结果,我没参加过什么竞赛,主程序你自己按照你们老师的要求进行输入、输出的设置:
procere big_sub(a:string; b:string);
var i,j,k,n:integer;
begin
i:=length(a);
j:=length(b);
while (i>=1)and(j>=1) do
begin
if a[i]>=b[j] then k:=0 else k:=10;
a[i]:=chr(ord('0')+ord(a[i])+k-ord(b[j]));
n:=i-1;
while k>0 do
begin
if a[n]>'0' then k:=0 else k:=10;
a[n]:=chr(ord(a[n])+k-1);
n:=n-1;
end;
i:=i-1;
j:=j-1;
end;
writeln(a);
end;
var a,b:string;
begin
a:='9999999999999999999999999999999999999'; {readln(a);}
b:='9999999999999'; {readln(b);}
big_sub(a,b);
a:='1000000000000000000000000000000000000'; {readln(a);}
b:='123'; {readln(b);}
big_sub(a,b);
end.
程序运行结果是:
9999999999999999999999990000000000000
0999999999999999999999999999999999877
如果要求取消输出结果最左边的0,我相信你也是能做到的。
热心网友
时间:2023-11-01 10:40
楼下的没理解楼主的意思吗!!!!
const maxn=255;
type
ntype=array[1..100]of integer;
var
len,,i:integer;
a,b,c:ntype;
procere init;
var
i,templen:integer;
tempstring:string;
begin
len:=0;
fillchar(a,sizeof(a),0);
readln(tempstring);
templen:=length(tempstring);
if templen>len then len:=templen;
for i:=0 to templen-1 do a[maxn-i]:=ord(tempstring[templen-i])-48;
fillchar(b,sizeof(b),0);
readln(tempstring);
templen:=length(tempstring);
if templen>len then len:=templen;
for i:=0 to templen-1 do b[maxn-i]:=ord(tempstring[templen-i])-48;
end;
procere lend(i:integer);
begin
if a[i]<=0 then lend(i-1);
dec(a[i]);
inc(a[i+1],10); //a[i+1]:=a[i+1]+10;
end;
procere main;
var
i:integer;
begin
for i:=maxn downto maxn-len+1 do
begin
if a[i]<b[i] then lend(i-1);
c[i]:=a[i]-b[i];
end;
end;
procere print;
var
i:integer;
begin
if c[maxn-len+1]>0 then write(c[maxn-len+1]);
for i:=maxn-len+2 to maxn do write(c[i]);
writeln;
end;
procere once;
begin
init;
main;
print;
end;
begin
read(n);
for i:=1 to n do
begin
once;
readln;
end;
end.