free pascal高精度加法计算,求高手看看程序!追加悬赏50!var s,s1,s2:string; a,b,c:array [1..260] of integer; i,l,k1,k2:integer; begin write('input s1:');readln(s1); write('input s2:');readln(s2); l:=length(s1); k

来源:学生作业帮助网 编辑:作业帮 时间:2024/04/20 07:50:54

free pascal高精度加法计算,求高手看看程序!追加悬赏50!var s,s1,s2:string; a,b,c:array [1..260] of integer; i,l,k1,k2:integer; begin write('input s1:');readln(s1); write('input s2:');readln(s2); l:=length(s1); k
free pascal高精度加法计算,求高手看看程序!追加悬赏50!
var
s,s1,s2:string;
a,b,c:array [1..260] of integer;
i,l,k1,k2:integer;
begin
write('input s1:');readln(s1);
write('input s2:');readln(s2);
l:=length(s1);
k1:=260;
for i:=l downto 1 do
begin
a[k1]:=ord(s1)-48;
k1:=k1-1;
end;
k1:=k1+1;
l:=length(s2);
k2:=260;
for I+:=l downto 1 do
begin
b[k2]:=ord(s2)-48;
k2:=k2-1;
end;
k2:=k2+1;
if k1>k2 then k:=k2 else k:=k1;
y:=0;
for i:=260 downto k do
begin
x:=a+b+y;
c:=x mod 10;
y:=x div 10;
end;
if y<>0 then begin k:=k-1;c[k]:=y;
end;
for i:=k to 260 do write(c);
writeln;
end.

free pascal高精度加法计算,求高手看看程序!追加悬赏50!var s,s1,s2:string; a,b,c:array [1..260] of integer; i,l,k1,k2:integer; begin write('input s1:');readln(s1); write('input s2:');readln(s2); l:=length(s1); k
{楼上的Compile都有问题(其他的暂且不说).
以后可以自己先调试看看有没有问题}
var a,b,c:array[0..256] of integer;
s1,s2:string;
i,z:integer;
begin
write('input s1:');readln(s1);
write('input s2:');readln(s2);
for i:=length(s1) downto 1 do a[i]:=ord(s1[i])-48;{原来的ord的用法是错误的}
for i:=length(s2) downto 1 do b[i]:=ord(s2[i])-48;
if length(s1)>length(s2) then z:=length(s1) else z:=length(s2);
for i:=z downto 1 do
begin
c[i]:=a[i]+b[i]+c[i];{c[i]自己也要加因为可能存在进位问题,
不明白可以自己去掉再试试23+97}
c[i-1]:=c[i-1]+c[i] div 10;
c[i]:=c[i] mod 10;
end;
if c[0]=0 then{如果两数相加进位将存入c[0]}
for i:=1 to z do write(c[i])
else for i:=0 to z do write(c[i]);
writeln;
end.

你那k1和k2没什么用,直接比较length(s1)和length(s2)就行了。改为:
for i:=length(s1) downto 1 do a[i]:=ord(s1)-48;
for i:=length(s2) downto 1 do b[i]:=ord(s2)-48;
if length(s1)>length(s2) then z:=lengt...

全部展开

你那k1和k2没什么用,直接比较length(s1)和length(s2)就行了。改为:
for i:=length(s1) downto 1 do a[i]:=ord(s1)-48;
for i:=length(s2) downto 1 do b[i]:=ord(s2)-48;
if length(s1)>length(s2) then z:=length(s1) else z:=length(s2);
这样清晰又明了,我看你的程序看了好几分钟都还没明白你写了什么,次要的内容写了那么多。
下面的主要程序改为:
for i:=z downto 1 do
begin
c[i]:=a[i]+b[i];
c[i+1]:=c[i+1]+c[i] div 10;
c[i]:=c[i] mod 10;
end;
if c[z+1]<>0 then z:=z+1;
for i:=1 to z do write(a[i]) ;
最后程序就缩短了很多:
var a,b,c:array[1..256] of integer;
s1,s2:string;
i,z:integer;
begin
write('input s1:');readln(s1);
write('input s2:');readln(s2);
for i:=length(s1) downto 1 do a[i]:=ord(s1)-48;
for i:=length(s2) downto 1 do b[i]:=ord(s2)-48;
if length(s1)>length(s2) then a:=length(s1) else a:=length(s2);
for i:=z downto 1 do
begin
c[i]:=a[i]+b[i];
c[i+1]:=c[i+1]+c[i] div 10;
c[i]:=c[i] mod 10;
end;
if c[z+1]<>0 then z:=z+1;
for i:=1 to z do write(a[i]) ;
end.

收起

free pascal 高精度计算谁有讲解给一下 free pascal高精度加法计算,求高手看看程序!追加悬赏50!var s,s1,s2:string; a,b,c:array [1..260] of integer; i,l,k1,k2:integer; begin write('input s1:');readln(s1); write('input s2:');readln(s2); l:=length(s1); k 急!求C语言高精度加法计算的程序编程完成两个1000位以内的正整数的加法运算 PASCAL求2的n次方用高精度算 Free Pascal 如何求出一个数组中的有效元素个数 难道高精度计算一般要转成字符型来求数的长度?如a:(0,0,0,0,1,0,1)那么这个数是101 有效位数就是3位如果有这么一个函数就好了……求具体程 free pascal 求最大公约数与最小公倍数 FREE PASCAL,输入两个数,求最小公倍数 free pascal 求最大公约数与最小公倍数 pascal高精度快速幂程序 free pascal如何计算圆的周长与面积 pascal wikioi 3123 高精度练习之超大整数乘法 是超大的,不是普通的高精度乘法,求代码,wikioi 3123 高精度练习之超大整数乘法 Description 给出两个正整数A和B,计算A*B的值.保证A和B的位数不超过100000 pascal用高精度方法求s=1+2+3+……+n的精确值 pascal用高精度方法求s=1+2+3+……+n的精确值 急求free pascal错误表本人急需要free pascal错误表,一定是要带中文的,所用的free pascal版本为1.0.6,一定要是free pascal,而不是turbo pascal或者其他的 free pascal常见语句 求几道 初学 free pascal free pascal 黑洞6174 pascal语言编程问题(free pascal求1—N中的素数的个数.(1