|
|
|
Đã lưu IP
|
|
Đã khóa chức năng gửi bài. |
|
Trả lời: [ gíup e với] bài CWAY 7 năm, 12 tháng trước
|
(+0)
|
type bignum = record
size:longint;
value:array[1..1500] of integer;
end;
var f,g : text;
k,n : integer;
S : bignum;
procedure mdoc;
Begin
assign(f,fi);
reset(f);
assign(g,fo);
rewrite(g);
readln(f,n);
end;
//
procedure daomang(var x:bignum);
var i,j,l:longint;
tmp:byte;
Begin
i:=1;
j:=x.size;
while i<j do
Begin
tmp:=x.value[i];
x.value[i]:=x.value[j];
x.value[j]:=tmp;
inc(i);
dec(j);
end;
end;
//
function nhan(x:bignum;y:integer):bignum;
var i,l:longint;
nho:byte;
sum:byte;
z:bignum;
Begin
l:=x.size;
daomang(x);
nho:=0;
fillchar(z,sizeof(z),0);
for i:=1 to l do
Begin
sum:=x.value[i]*y+nho;
z.value[i]:= sum mod 10;
nho:=sum div 10;
end;
If nho>0 then
Begin
inc(l);
z.size:=l;
z.value[l]:=nho;
end
else z.size:=l;
exit(z);
end;
//
function cong(x:bignum):bignum;
var i,l:longint;
nho:byte;
sum:byte;
z:bignum;
Begin
i:=2;
l:=x.size;
fillchar(z,sizeof(z),0);
sum:=x.value[1]+1;
z.value[1]:=sum mod 10;
nho:=sum div 10;
for i:=2 to l do
Begin
sum:=x.value[i]+nho;
z.value[i]:=sum mod 10;
nho:=sum div 10;
end;
If nho>0 then
Begin
inc(l);
Z.SIZE:=l;
z.value[l]:=nho;
end
else z.size:=l;
daomang(z);
exit(z);
end;
Begin
mdoc;
if n=2 then
begin
S.size:=1;
S.value[1]:=1;
end
else if n=3 then
Begin
S.size:=1;
S.value[1]:=2;
end
else if n=4 then
begin
S.size:=1;
S.value[1]:=5;
end
else if n=5 then
begin
S.size:=2;
S.value[1]:=1;
S.value[2]:=6;
end
else if n=6 then
Begin
S.size:=2;
S.value[1]:=6;
S.value[2]:=5;
end
else if n=7 then
Begin
S.size:=3;
S.value[1]:=3;
S.value[2]:=2;
S.value[3]:=6;
end
else if n>7 then
Begin
S.size:=3;
S.value[1]:=3;
S.value[2]:=2;
S.value[3]:=6;
for k:=8 to n do
Begin
S:=nhan(S,k-2);
S:=cong(S);
end;
end;
for k:=1 to S.size do
write(g,S.value[k]);
close(f);
close(g);
end.
đây @@
|
|
|
Đã lưu IP
|
|
Đã khóa chức năng gửi bài. |
|
Trả lời: [ gíup e với] bài CWAY 7 năm, 12 tháng trước
|
(+0)
|
Ví dụ cộng số lớn ở cơ số 1000000000 này Naruto
Code: | const base=1000000000
|
Code: | Procedure Plus;
var
j,tmp,L : longint;
T,carry : int64;
begin
Carry:=0;
if Lres>La then L:=Lres else L:=La;
for j:=1 to L do
begin
T:=Res[j]+A[j]+Carry;
Res[j]:=T mod base;
Carry:=T div base;
end;
Lres:=L;
if Carry<>0 then
begin
inc(Lres);
Res[Lres]:=Carry;
end;
end;
|
|
|
|
Đã lưu IP
|
|
+ cho mình nhé
|
|
Đã khóa chức năng gửi bài. |
|
Trả lời: [ gíup e với] bài CWAY 7 năm, 12 tháng trước
|
(+0)
|
babameme viết:
QUOTE: Ví dụ cộng số lớn ở cơ số 1000000000 này Naruto
Code: | const base=1000000000
|
Code: | Procedure Plus;
var
j,tmp,L : longint;
T,carry : int64;
begin
Carry:=0;
if Lres>La then L:=Lres else L:=La;
for j:=1 to L do
begin
T:=Res[j]+A[j]+Carry;
Res[j]:=T mod base;
Carry:=T div base;
end;
Lres:=L;
if Carry<>0 then
begin
inc(Lres);
Res[Lres]:=Carry;
end;
end;
|
sao lại chuyển saq base như thế đk nhỉ ????
cậu giải thích rõ đk k
|
|
|
Đã lưu IP
|
|
Đã khóa chức năng gửi bài. |
|
Trả lời: [ gíup e với] bài CWAY 7 năm, 12 tháng trước
|
(+0)
|
Bài này dùng cơ số là sao???
|
|
|
Đã lưu IP
|
|
Đã khóa chức năng gửi bài. |
|
Trả lời: [ gíup e với] bài CWAY 7 năm, 12 tháng trước
|
(+0)
|
Tức là thế này,bình thường xử lí số lớn các cậu xử lí ở cơ số 10, mỗi phần tử mảng là 1 chữ số, còn bây giờ là cơ số 10^x, tức là mỗi phần tử là 1 số có x-1 chữ số
|
|
|
Đã lưu IP
|
|
+ cho mình nhé
|
|
Đã khóa chức năng gửi bài. |
|