Time Limit: 1 Sec Memory Limit: 162 MB
Description
给定n(N<=100),编程计算有多少个不同的n轮状病毒。
Input
第一行有1个正整数n。
Output
将编程计算出的不同的n轮状病毒数输出
Sample Input
3
Sample Output
16
错误:在做高精乘的时候把y=0放在两重循环之外了。。。
AC CODE
program
hy_1002;
type
ty=
array
[
0..100
]
of
longint
;
var
a:
array
[
1..100
]
of
ty;
n,i:
longint
;
b:ty;
//============================================================================
function
cheng(k:
longint
):ty;
var
x,y,i:
longint
;
begin
y:=
0
; fillchar(cheng,sizeof(cheng),
0
);
for
i:=
1
to
a[k][
0
]
do
begin
x:=
3
*a[k][i]+y;
cheng[i]:=x
mod
10
; y:=x
div
10
;
end
; cheng[
0
]:=a[k][
0
];
if
y>
0
then
begin
inc(cheng[
0
]);
cheng[cheng[
0
]]:=y;
end
;
end
;
//============================================================================
function
jian(a,b:ty):ty;
var
x,i:
longint
;
begin
fillchar(jian,sizeof(jian),
0
);
for
i:=
1
to
a[
0
]
do
begin
x:=a[i]-b[i];
if
x<
0
then
begin
jian[i]:=x+
10
;
dec(a[i+
1
]);
end
else
jian[i]:=x;
end
; jian[
0
]:=a[
0
];
if
a[a[
0
]]=
0
then
dec(jian[
0
]);
end
;
//============================================================================
function
multi(k:
longint
; p:
boolean
):ty;
var
x,y,i,j:
longint
;
begin
fillchar(multi,sizeof(multi),
0
);
for
i:=
1
to
a[k][
0
]
do
begin
y:=
0
; //每一次都要赋为0!
for
j:=
1
to
a[k][
0
]
do
begin
x:=multi[i+j-
1
]+a[k][i]*a[k][j]+y;
multi[i+j-
1
]:=x
mod
10
; y:=x
div
10
;
end
;
if
y>
0
then
multi[i+j]:=y;
end
; multi[
0
]:=a[k][
0
]*
2
-
1
;
if
y>
0
then
begin
inc(multi[
0
]);
multi[multi[
0
]]:=y;
end
;
y:=
0
;
if
p
then
for
i:=
1
to
multi[
0
]
do
begin
x:=multi[i]*
5
+y;
multi[i]:=x
mod
10
; y:=x
div
10
;
end
;
if
y>
0
then
begin
inc(multi[
0
]);
multi[multi[
0
]]:=y;
end
;
end
;
//============================================================================
begin
readln(n);
a[
1
][
1
]:=
1
;
if
n
mod
2
=
1
then
a[
2
][
1
]:=
4
else
a[
2
][
1
]:=
3
;
a[
1
][
0
]:=
1
; a[
2
][
0
]:=
1
;
for
i:=
3
to
(n+
1
)
div
2
do
begin
b:=cheng(i-
1
); a[i]:=jian(b,a[i-
2
]);
end
;
b:=multi((n+
1
)
div
2
,
not
(odd(n)));
for
i:=b[
0
]
downto
1
do
write
(b[i]);
writeln
;
end
.