关于vijos的p1040的四位一压的问题

[复制链接]
查看11 | 回复3 | 2009-7-18 20:42:40 | 显示全部楼层 |阅读模式
program p1040_4wei1;
var
i,j,code,len,len1,len2,ll1,ll2,l1,l2:longint;
s1,s2:ansistring;
x,y:array[1..1000] of integer;
z:array[1..2000] of qword;
s:string[4];
begin
readln(s1);
readln(s2);
len1:=length(s1);
len2:=length(s2);
if len1 mod 4 = 0 then begin

ll1:=len1 div 4;

l1:=4;
end
else begin

ll1:=len1 div 4 + 1;

l1:=len1 mod 4;
end;
if len2 mod 4 = 0 then begin

ll2:=len2 div 4;

l2:=4;
end
else begin

ll2:=len2 div 4 + 1;

l2:=len2 mod 4;
end;
for i:=1 to ll1-1 do begin

s:=copy(s1,i*4-3,i*4);

val(s,x,code);

z:=0;
end;
s:=copy(s1,ll1*4-3,(ll1-1)*4+l1);
val(s,x[ll1],code);
for i:=1 to ll2-1 do begin

s:=copy(s2,i*4-3,i*4);

val(s,y,code);

z[ll1+i]:=0;
end;
s:=copy(s2,ll2*4-3,(ll2-1)*4+l2);
val(s,y[ll2],code);
for i:=1 to ll1 do begin

for j:=1 to ll2 do begin

z[i+j-1]:=z[i+j-1] + x * y[j];

z[i+j]:=z[i+j]+(z[i+j-1] div 10000);

z[i+j-1]:=z[i+j-1] mod 10000;

end;
end;
len:=ll1+ll2;
if z[len]0 then

for j:=len downto 1 do

write(z[j])
else

for j:=(len-1) downto 1 do

write(z[j]);
end.
=================
可以把我的程序修改并告诉我哪里错了吗?
如果不想改的话,那可以发一个正确的并加注释说明的程序吗?
先谢谢了……
原题地址: http://www.vijos.cn/Problem_Show.asp?id=1040

回复

使用道具 举报

千问 | 2009-7-18 20:42:40 | 显示全部楼层
同楼下观点。建议复习一下几个字符串操作参数的定义。一般只用到以下几个length(s) 取出s串的长度,属于函数。pos(S1,S2)在S2中查找S1,S1可以是一个字符,也可以是一个串。如果没有,则返回0,属于函数。S1,S2我现在也不确定,你自己去试试。copy/delete(s,a,b)。在S中,从第I位置开始,复制、删除长度为b。COPY属于函数,DELETE属于过程。自己补充的错误高精度乘法一般要反序保存。如果一位对应四位数字的话,X[1]放的是各位,否则就是错的,你不妨模拟几个数字。至于四位数字的取法有不是完全的反序,你自己去归纳这个规律吧。...
回复

使用道具 举报

千问 | 2009-7-18 20:42:40 | 显示全部楼层
提点意见(纯粹的吐槽,无视也可以):程序很长,而且可读性不高,应该养成写自定义的过程和函数.在把S1附入S再转换成整数的过程中,应该注意copy的用法,(举个例:copy(s,i,j),表示把字符串s中的第i个字符起的j个字符复制出来,e.g:writeln(copy('abcdef',3,2))结果会输出'cd'),也就是说应把s:=copy(s1...
回复

使用道具 举报

千问 | 2009-7-18 20:42:40 | 显示全部楼层
没有区分大小写,应该能...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行