主题:【求助】急!!!!!!!
风之落叶
[专家分:40] 发布于 2007-03-17 23:12:00
输入两个小于10000000000000000000000的整数,用高精度算法求两数和。
(用字符串做)
回复列表 (共11个回复)
沙发
bigchen [专家分:1940] 发布于 2007-03-18 09:34:00
var
s1,s2:string;
i,j,k,l,l1,l2:integer;
a:packed array[1..50] of integer;
b:packed array[1..50] of integer;
c:packed array[1..50] of integer;
begin
readln(s1);l1:=length(s1);
readln(s2);l2:=length(s2);
for i:=1 to l1 do a[i]:=ord(s1[l1+1-i])-48;
for i:=1 to l2 do b[i]:=ord(s2[l2+1-i])-48;
if l1>l2 then l:=l1 else l:=l2;
for i:=1 to l do
begin
c[i]:=a[i]+b[i];
c[i+1]:=c[i] div 10;
c[i]:=c[i] mod 10;
end;
if c[l+1]<>0 then l:=l+1;
for i:=l downto 1 do write(c[i]);
end.
板凳
bigchen [专家分:1940] 发布于 2007-03-18 09:36:00
这个程序在语法方面我不保证完全正确
因为不是在PASCAL环境下
无法编译
所以你自己检查语法问题吧
3 楼
小田甜 [专家分:3910] 发布于 2007-03-18 14:24:00
[url=http://upload.programfan.com/upfile/200703181422779.rar]高精度加减乘法运算[/url]
4 楼
风之落叶 [专家分:40] 发布于 2007-03-18 20:11:00
我试了,不对!
5 楼
风之落叶 [专家分:40] 发布于 2007-03-18 20:11:00
来帮帮我吧!
6 楼
bigchen [专家分:1940] 发布于 2007-03-18 21:08:00
不是吧???
7 楼
编程黑客 [专家分:1660] 发布于 2007-03-19 22:42:00
理应说CXY的程序没有错误
可具体我也不知道哪里是错了
8 楼
风之落叶 [专家分:40] 发布于 2007-04-01 18:35:00
我知道了!
c[i]:=a[i]+b[i];
c[i+1]:=c[i] div 10;
c[i]:=c[i] mod 10;
进位错了!c[i]:=a[i]+b[i];使原有进位数消失了!
9 楼
游侠UFO [专家分:1200] 发布于 2007-04-21 16:25:00
我的BLOG里面有高精度算法的代码以及其它一些算法的代码,感兴趣的朋友可以去看看.
http://blog.sina.com.cn/ufownl
10 楼
逍遥兔. [专家分:0] 发布于 2007-07-12 19:53:00
var
s1,s2:string;
i,j,k,l,l1,l2:integer;
a:packed array[1..50] of integer;
b:packed array[1..50] of integer;
c:packed array[1..50] of integer;
begin
readln(s1);l1:=length(s1);
readln(s2);l2:=length(s2);
for i:=1 to l1 do a[i]:=ord(s1[l1+1-i])-48;
for i:=1 to l2 do b[i]:=ord(s2[l2+1-i])-48;
if l1>l2 then l:=l1 else l:=l2;
for i:=1 to l do
begin
c[i]:=a[i]+b[i];
c[i+1]:=c[i] div 10;
c[i]:=c[i] mod 10;
end;
if c[l+1]<>0 then l:=l+1;
for i:=l downto 1 do write(c[i]);
end.
我来回复