⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 maxmul.pas

📁 PASCAL光盘资料PASCAL光盘资料PASCAL光盘资料
💻 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 + -