📄 maxmul.pas
字号:
program maxmul;
var
a:array[1..200] of integer; {存放拆分后的各项}
b:array[1..500] of integer; {存放乘积的各项}
len1,len2:integer; {len1存放拆分后的项数,len2乘积的位数}
n:integer;
procedure init;
begin
assign(input,'maxmul.in');
assign(output,'maxmul.out');
reset(input); readln(n); close(input);
rewrite(output);
end;
procedure divi; {拆分的过程}
var i:integer;
begin
len1:=1;
while n>len1 do
begin
a[len1]:=len1+1;
inc(len1);
n:=n-len1;
end;
dec(len1);
if n>0 then {将剩余的数分配给前面的各项,从后面开始}
begin
i:=len1;
while n>0 do
begin
inc(a[i]); {当前项加1}
dec(n); {剩余的少1}
dec(i); {往前移一项}
if i=0 then i:=len1; {分到第一项后再回到最后一项}
end;
end;
end;
procedure mul;
var i,j:integer;
begin
fillchar(b,sizeof(b),0);
len2:=1; b[1]:=1; {乘积的初始值为1,只有一位}
for i:=1 to len1 do
begin
for j:=1 to len2 do b[j]:=b[j]*a[i]; {各项相乘}
for j:=1 to len2+3 do {进位处理}
begin
b[j+1]:=b[j+1]+b[j] div 10;
b[j]:=b[j] mod 10;
end;
len2:=len2+4;
while b[len2]=0 do dec(len2); {去除高位的0}
end;
end;
procedure print; {输出部分}
var i:integer;
begin
for i:=1 to len1-1 do write(a[i],' ');
writeln(a[len1]);
for i:=len2 downto 1 do write(b[i]);
writeln;
end;
begin
init;
if n<5 then {特殊情况的处理}
begin writeln(1,' ',n-1); writeln(n-1); end
else
begin
divi; mul; print;
end;
close(output);
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -