1
/*
给定一个八进制的小数题目要求你把它转换为十进制小数,转换后小数的位数是转换前八进制小
数位数的3倍且不输出末尾无意义的零(即后置零).
我采用的方法是乘10然后对8取整(现在假设将p进制的小数转换为n进制,
同样采用乘n取整:),每转换一位,都必须从最低位s[len-1]开始至小数的最高位(即小数点后的一位),
每次计算积 g=a[j]*n+k(其中k为下一位积的进位),本位进位数 k=g/p,积在本位存入
s[j]=g%p;最后的整数k作为转换的一位存放于转换结果字符串中。
*/
2
#include
"
iostream
"
3
#include
"
math.h
"
4
using
namespace
std;
5
char
ch[
100
];
6
int
ww[
100
],pp
=
0
;
7
int
a[
100
],b[
100
],c[
100
],d[
100
],w[
100
],R[
100
],RR[
100
];
8
int
i ,j,L,t,s;
9
int
main()
10
{
11
while
(scanf(
"
%s
"
,
&
ch)
!=
EOF)
12
{
13
pp
=
0
;
14
memset(c,
0
,
sizeof
(c));
15
memset(a,
1
,
sizeof
(a));
16
memset(w,
0
,
sizeof
(w));
17
memset(R,
0
,
sizeof
(R));
18
L
=
strlen(ch);
19
int
sign
=
0
;
20
for
(i
=
0
;i
<
L;i
++
)
21
if
(ch[i]
==
'
.
'
) { sign
=
i;
break
; }
22
int
k
=
0
;
23
for
(i
=
L
-
1
;i
>
sign;i
--
)
24
a[k
++
]
=
ch[i]
-
'
0
'
;
25
26
int
flag
=
0
;
27
t
=
1
; c[
0
]
=
1
;
28
s
=
0
;
29
//
************求0.125~n*************
30
for
(
int
p
=
k
-
1
;p
>=
0
;p
--
)
31
{
32
for
(j
=
0
;j
<
t;j
++
)
33
{
34
int
sum
=
125
*
c[j]
+
flag;
35
c[j]
=
sum
%
10
;
36
flag
=
sum
/
10
;
37
}
38
while
(flag)
39
{
40
c[t
++
]
=
flag
%
10
;
41
flag
/=
10
;
42
}
43
int
mark
=
0
;
44
//
********************************
45
for
(
int
q
=
0
;q
<
t;q
++
)
46
{
47
int
mul
=
a[p]
*
c[q]
+
mark;
48
d[s
++
]
=
mul
%
10
;
49
mark
=
mul
/
10
;
50
}
51
52
int
ii,jj;
53
for
(ii
=
0
;ii
<
p
*
3
;ii
++
)
//
增加0的个数,3表示每乘一次得三位小数
54
w[ii]
=
0
;
55
56
for
(jj
=
0
;jj
<
t;jj
++
)
57
w[ii
++
]
=
d[jj];
//
将所有的数保存在w[]中
58
59
s
=
0
;
60
61
ww[pp
++
]
=
ii;
//
长度相等
62
for
(i
=
ii;i
<
ww[
0
];i
++
)
63
w[i]
=
0
;
64
65
int
Flag
=
0
;
66
for
(i
=
0
;i
<
ww[
0
];i
++
)
67
{
68
int
sum
=
w[i]
+
R[i]
+
Flag;
69
RR[i]
=
sum
%
10
;
70
Flag
=
sum
/
10
;
71
}
72
if
(Flag
==
1
) RR[i
++
]
=
Flag;
73
for
(
int
xx
=
0
;xx
<
i;xx
++
)
74
R[xx]
=
RR[xx];
75
}
76
printf(
"
%s [8] =
"
,ch);
77
printf(
"
0.
"
);
78
int
sign11
=
0
;
79
80
for
(i
=
0
;i
<
ww[
0
];i
++
)
81
if
(RR[i]
!=
0
) {sign11
=
i;
break
;}
82
for
(i
=
ww[
0
]
-
1
;i
>=
sign11;i
--
)
83
printf(
"
%d
"
,RR[i]);
84
printf(
"
[10]\n
"
);
85
}
86
return
0
;
87
}