您的位置:首页 > 其它

hdu1753(a+b)

2016-01-15 00:00 267 查看
http://acm.hdu.edu.cn/showproblem.php?pid=1753

有时间优化一下,写的好长啊!





View Code

#include
"
iostream
"

using

namespace
std;

int
main()
{

char
a[
1001
],b[
1001
];

int
c[
1001
] , d[
1001
];

int
e[
1001
];

int
i,j;

while
(cin
>>
a
>>
b)
{

int
L1
=
strlen(a);

int
L2
=
strlen(b);

int
start_a
=
L1
-
1
,start_b
=
L2
-
1
;

for
(i
=
L1
-
1
;i
>=
0
;i
--
)
if
(a[i]
!=
'
0
'
) { start_a
=
i;
break
; }
//
去除末尾0

for
(i
=
L2
-
1
;i
>=
0
;i
--
)
if
(b[i]
!=
'
0
'
) { start_b
=
i;
break
; }

int
s
=
0
,t
=
0
, _max;

int
marka
=
start_a,markb
=
start_b;

for
( i
=
0
; i
<=
start_a ;
++
i )
{

if
(a[i]
==
'
.
'
) { marka
=
i;
break
; }
}

for
(i
=
0
; i
<=
start_b ;
++
i)
{

if
(b[i]
==
'
.
'
) { markb
=
i;
break
;}
}

if
(start_a
-
marka
>
start_b
-
markb) _max
=
start_a
-
marka;

else
_max
=
start_b
-
markb;

if
(start_a
-
marka
>
start_b
-
markb)
{

for
( i
=
start_b
+
1
; i
<=
start_b
+
start_a
-
marka
-
start_b
+
markb ; i
++
)
b[i]
=
'
0
'
;

for
( i
=
0
; i
<=
start_b
+
start_a
-
marka
-
start_b
+
markb ;
++
i )
{

if
(b[i]
!=
'
.
'
) d[t
++
]
=
b[i]
-
'
0
'
;
}

for
( i
=
0
; i
<=
start_a ;
++
i )
{

if
(a[i]
!=
'
.
'
) c[s
++
]
=
a[i]
-
'
0
'
;
}
}

else

{

for
( i
=
start_a
+
1
; i
<=
start_a
+
start_b
-
markb
-
start_a
+
marka ; i
++
)
a[i]
=
'
0
'
;

for
(i
=
0
; i
<=
start_b ;
++
i)
{

if
(b[i]
!=
'
.
'
) d[t
++
]
=
b[i]
-
'
0
'
;
}

for
( i
=
0
; i
<=
start_a
+
start_b
-
markb
-
start_a
+
marka ;
++
i )
{

if
(a[i]
!=
'
.
'
) c[s
++
]
=
a[i]
-
'
0
'
;
}
}

int
flag
=
0
,m
=
0
;

if
(s
>
t)
{

for
(i
=
s
-
1
,j
=
t
-
1
;i
>=
s
-
t,j
>=
0
;j
--
,i
--
)
{
e[m
++
]
=
(c[i]
+
d[j]
+
flag)
%
10
;
flag
=
(c[i]
+
d[j]
+
flag)
/
10
;
}

for
(i
=
s
-
t
-
1
;i
>=
0
;i
--
)
{
e[m
++
]
=
(c[i]
+
flag)
%
10
;
flag
=
(c[i]
+
flag)
/
10
;
}

}

else

{

for
(i
=
s
-
1
,j
=
t
-
1
;i
>=
0
,j
>=
t
-
s; j
--
,i
--
)
{
e[m
++
]
=
(c[i]
+
d[j]
+
flag)
%
10
;
flag
=
(c[i]
+
d[j]
+
flag)
/
10
;
}

if
(t
>
s)
{

for
(i
=
t
-
s
-
1
;i
>=
0
;i
--
)
{
e[m
++
]
=
(d[i]
+
flag)
%
10
;
flag
=
(d[i]
+
flag)
/
10
;
}
}
}

while
(flag)
{
e[m
++
]
=
flag
%
10
;
flag
/=
10
;
}

int
mark
=
0
,count
=
0
;

for
(i
=
0
;i
<
m;i
++
)
if
(e[i]
==
0
) count
++
;

if
(count
==
m) cout
<<
"
0
"
<<
endl;

else

{

for
(i
=
0
;i
<=
_max;i
++
)
{

if
(e[i]) { mark
=
i ;
break
; }

else

if
(i
=
_max) {mark
=
_max;
break
;}
}

for
(i
=
m
-
1
;i
>=
mark;i
--
)
{
cout
<<
e[i];

if
(i
==
_max
&&
i
!=
mark) cout
<<
"
.
"
;
}
cout
<<
endl;
}
}

return

0
;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: