| Time Limit: 500MS | Memory Limit: 10000K | |
| Total Submissions: 71191 | Accepted: 16721 |
??? 本題總的來說并不是很難,但是卻很麻煩,我在北大上做題時(shí)wrong了n次,最終總算通過了,我不知道大牛們是怎么做的,但是我的做法的確是很麻煩
??? 思想是:就是將輸入的自然數(shù)a去掉小數(shù)點(diǎn)后,然后進(jìn)行n次大整數(shù)相乘,每次的乘數(shù)是輸入以后去掉小數(shù)點(diǎn)的a,被乘數(shù)是前面乘過以后的結(jié)果。在結(jié)束完n次以后將小數(shù)點(diǎn)加到合適的位置,并進(jìn)行前后的除零。
代碼:
?
1
#include
<
stdio.h
>
2
#include
<
string
.h
>
3
?
int
main()
4
{
5
int
i,j,sum,k,res[
500
][
500
],flag
=
0
,b,dox,mark,deadline,t;
6
char
result[
500
],a[
65
],tran[
500
];
7
while
(scanf(
"
%s
"
,a)
!=
EOF)
8
{
9
sum
=
0
;k
=
0
;dox
=
0
;mark
=
0
;
10
memset(result,
0
,
sizeof
(result));
11
result[
0
]
=
'
1
'
;
12
getchar();
13
scanf(
"
%d
"
,
&
b);
14
int
len1
=
strlen(a);
15
if
(a[
0
]
==
'
0
'
)
16
{
17
for
(i
=
2
;a[i]
!=
'
\0
'
;i
++
)
18
a[i
-
2
]
=
a[i];
19
len1
-=
2
;
20
dox
=
len1;
21
a[len1]
=
'
\0
'
;
22
}
23
else
24
{
25
for
(i
=
0
;a[i]
!=
'
\0
'
;i
++
)
26
{
27
if
(a[i]
==
'
.
'
)
28
{
29
mark
=
1
;
30
len1
--
;
31
continue
;
32
}
33
if
(mark)
34
{
35
a[i
-
1
]
=
a[i];
36
dox
++
;
37
}
38
}
39
a[len1]
=
'
\0
'
;
40
}
41
for
(t
=
1
;t
<=
b;t
++
)
42
{
43
memset(res,
0
,
sizeof
(res));
44
int
len2
=
strlen(result);
45
strcpy(tran,result);
46
for
(i
=
0
;i
<
len2;i
++
)
47
result[i]
=
tran[len2
-
1
-
i];
48
k
=
0
;sum
=
0
;
49
for
(i
=
0
;i
<
len1;i
++
)
50
for
(j
=
0
;j
<
len2;j
++
)
51
res[i][j]
=
(a[i]
-
'
0
'
)
*
(result[j]
-
'
0
'
);
52
for
(i
=
len1
-
1
;i
>=
0
;i
--
)
53
{
54
for
(j
=
len2
-
1
;j
>=
0
;j
--
)
55
sum
=
sum
+
res[i
+
len2
-
j
-
1
][j];
56
result[k]
=
sum
%
10
+
'
0
'
;
57
k
=
k
+
1
;
58
sum
=
sum
/
10
;
59
}
60
for
(i
=
len2
-
2
;i
>=
0
;i
--
)
61
{
62
for
(j
=
0
;j
<=
i;j
++
)
63
sum
=
sum
+
res[i
-
j][j];
64
result[k]
=
sum
%
10
+
'
0
'
;
65
k
=
k
+
1
;
66
sum
=
sum
/
10
;
67
}
68
if
(sum
!=
0
)
69
{
70
result[k]
=
sum
+
'
0
'
;k
=
k
+
1
;
71
}
72
}
73
dox
=
dox
*
b;
74
int
len
=
strlen(result);
75
if
(dox
!=
0
)
76
{
77
if
(dox
<=
len
-
1
)
78
{
79
for
(i
=
len
-
1
;i
>=
dox;i
--
)
80
result[i
+
1
]
=
result[i];
81
result[dox]
=
'
.
'
;
82
len
++
;
83
}
84
else
85
{
86
result[dox]
=
'
.
'
;
87
for
(i
=
dox
-
1
;i
>
len
-
1
;i
--
)
88
result[i]
=
'
0
'
;
89
}
90
}
91
deadline
=
0
;
92
len
=
len
-
1
>
dox
?
len
-
1
:dox;
93
for
(i
=
0
;i
<=
len;i
++
)
94
{
95
if
(result[i]
!=
'
0
'
)
96
{
97
if
(result[i]
==
'
.
'
)
98
deadline
=
i
+
1
;
99
else
100
deadline
=
i;
101
break
;
102
}
103
}
104
mark
=
0
;
105
106
for
(i
=
len;i
>=
deadline;i
--
)
107
if
(mark
==
1
||
result[i]
!=
'
0
'
)
108
{
109
mark
=
1
;
110
printf(
"
%c
"
,result[i]);
111
}
112
printf(
"
\n
"
);
113
}
114
return
0
;
115
}
116
???? (注意:) 我在之前wrong了幾次,主要是少考慮了幾種情況,經(jīng)過某位大牛的指點(diǎn)才能通過,此大牛給出的例子是 :
??????????????????? 4.000 2? 結(jié)果應(yīng)該是16 并非16.
?????????????????? ?10.000 2 結(jié)果應(yīng)該是100 并非是1或者100.
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元

