-
//xay dung lop quan ly so lon
-
# include<iostream.h>
-
# include<conio.h>
-
# include<string.h>
-
# include<stdlib.h>
-
# include<ctype.h>
-
class
big_int
-
{
-
private
:
-
int
a
[
100
]
;
//chuoi so
-
int
n
;
//so ky tu co nghia
-
int
dau
;
//dau cua so
-
public
:
-
int
nhap
(
)
;
-
void
in
(
)
;
-
big_int
(
)
;
-
big_int
(
int
b,
int
c
)
;
-
big_int congcungdau
(
big_int b
)
;
-
big_int congkhacdau
(
big_int b
)
;
-
big_int
operator
+
(
big_int b
)
;
-
big_int
operator
–
(
big_int b
)
;
-
big_int
operator
*
(
big_int b
)
;
-
void
chia
(
big_int b,big_int c,big_int
&
d
)
;
-
int
sosanh
(
big_int b
)
;
-
void
dich
(
int
b
)
;
-
big_int nhan
(
int
b
)
;
-
void
xoa0
(
)
;
-
big_int giaithua
(
)
;
-
}
;
-
//ham tao———————————————————————-
-
big_int
::
big_int
(
int
b,
int
c
)
-
{
-
n
=
b
;
-
for
(
int
i
=
0
;
i
<
100
;
i
++
)
-
{
-
if
(
i
<
n
)
a
[
i
]
=
c
;
-
else
a
[
i
]
=
0
;
-
}
-
}
-
//xoa cac ky tu 0 vo nghia 00001234->1234————————————-
-
void
big_int
::
xoa0
(
)
-
{
-
int
i
=
n
–
1
,dem
=
0
;
-
i
=
n
–
1
;
-
while
(
i
)
-
{
-
if
(
a
[
i
]
)
break
;
-
else
-
{
dem
++
;
a
[
i
]
=
NULL
;
}
-
i
—
;
-
-
}
-
n
=
n
–
dem
;
-
}
-
//nhan mot chuoi voi 1 so—————————————————–
-
big_int big_int
::
nhan
(
int
b
)
-
{
-
big_int c
;
-
int
i,nho
=
0
;
-
c.
n
=
n
;
-
for
(
i
=
0
;
i
<
n
;
i
++
)
-
{
-
c.
a
[
i
]
=
(
a
[
i
]
*
b
+
nho
)
%
10
;
-
nho
=
(
a
[
i
]
*
b
+
nho
)
/
10
;
-
}
-
if
(
nho
)
-
{
-
a
[
c.
n
]
=
nho
;
-
c.
n
++
;
-
}
-
c.
dau
=
dau
;
-
return
c
;
-
}
-
//nhan hai so lon—————————————————————-
-
big_int big_int
::
operator
*
(
big_int b
)
-
{
-
big_int c,d
;
-
int
i
;
-
for
(
i
=
0
;
i
<
b.
n
;
i
++
)
-
{
-
d
=
nhan
(
b.
a
[
i
]
)
;
-
d.
dich
(
i
)
;
-
c
=
c
+
d
;
-
}
-
if
(
dau
==
b.
dau
)
c.
dau
=
0
;
-
else
c.
dau
=
1
;
-
return
c
;
-
}
-
//nhan day so voi 10^b————————————————————-
-
void
big_int
::
dich
(
int
b
)
-
{
-
for
(
int
i
=
n
–
1
;
i
>=
0
;
i
—
)
a
[
i
+
b
]
=
a
[
i
]
;
-
for
(
i
=
0
;
i
<
b
;
i
++
)
a
[
i
]
=
0
;
-
n
=
n
+
b
;
-
}
-
//so sanh tri tuyet doi 2 so——————————————————
-
int
big_int
::
sosanh
(
big_int b
)
-
{
-
if
(
n
>
b.
n
)
return
1
;
-
if
(
n
<
b.
n
)
return
–
1
;
-
else
-
{
-
int
s
=
0
;
-
for
(
int
i
=
n
;
i
>=
0
;
i
—
)
-
{
-
if
(
a
[
i
]
>
b.
a
[
i
]
)
-
{
-
s
=
1
;
break
;
-
}
-
if
(
a
[
i
]
<
b.
a
[
i
]
)
-
{
-
s
=
–
1
;
break
;
-
}
-
}
-
return
s
;
-
}
-
}
-
//ham tao———————————————————————-
-
big_int
::
big_int
(
)
-
{
-
for
(
int
i
=
0
;
i
<
100
;
i
++
)
-
a
[
i
]
=
0
;
-
n
=
0
;
dau
=
0
;
-
}
-
//nhap chuoi thanh cong tra ve 1 neu khong tra ve 0—————————-
-
int
big_int
::
nhap
(
)
-
{
-
int
i
;
-
char
c
[
100
]
;
-
cout
<<
“nhap so “
;
-
cin
.
ignore
(
0
)
;
-
cin
.
get
(
c,
100
)
;
c,
-
if
(
c
[
0
]
!
=
‘-‘
&&
(
!
isdigit
(
c
[
0
]
)
)
)
return
0
;
-
for
(
i
=
1
;
i
<
strlen
(
c
)
;
i
++
)
-
if
(
!
isdigit
(
c
[
i
]
)
)
return
0
;
-
if
(
c
[
0
]
==
‘-‘
)
-
{
-
dau
=
1
;
-
for
(
i
=
strlen
(
c
)
–
1
;
i
>
0
;
i
—
)
-
{
-
char
*
b
;
-
b
[
0
]
=
c
[
i
]
;
-
a
[
strlen
(
c
)
–
i
–
1
]
=
atoi
(
b
)
;
-
}
-
}
-
else
-
{
-
dau
=
0
;
-
for
(
i
=
0
;
i
<
strlen
(
c
)
;
i
++
)
-
{
-
char
*
b
;
-
b
[
0
]
=
c
[
i
]
;
-
a
[
strlen
(
c
)
–
i
–
1
]
=
atoi
(
b
)
;
-
}
-
}
-
n
=
strlen
(
c
)
–
dau
;
-
return
1
;
-
}
-
//in chuoi so——————————————————————
-
void
big_int
::
in
(
)
-
{
-
if
(
dau
)
cout
<<
“-“
;
dau
-
for
(
int
i
=
n
–
1
;
i
>=
0
;
i
—
)
-
cout
<<
a
[
i
]
;
-
}
-
//ham cong 2 so cung dau——————————————————-
-
big_int big_int
::
congcungdau
(
big_int b
)
-
{
-
big_int c
;
-
if
(
n
>
b.
n
)
c.
n
=
n
;
else
c.
n
=
b.
n
;
-
int
nho
=
0
;
-
for
(
int
i
=
0
;
i
<
c.
n
;
i
++
)
-
{
-
c.
a
[
i
]
=
(
b.
a
[
i
]
+
a
[
i
]
+
nho
)
%
10
;
-
nho
=
(
a
[
i
]
+
b.
a
[
i
]
+
nho
)
/
10
;
-
}
-
if
(
nho
)
-
{
-
c.
a
[
c.
n
]
=
nho
;
-
c.
n
=
c.
n
+
1
;
-
}
-
c.
dau
=
dau
;
-
return
c
;
-
}
-
//ham cong 2 so khac dau——————————————————-
-
big_int big_int
::
congkhacdau
(
big_int b
)
-
{
-
big_int c,d,e,g
=
(
*
this
)
;
-
if
(
n
>
b.
n
)
c.
n
=
n
;
-
else
c.
n
=
b.
n
;
-
if
(
g.
sosanh
(
b
)
==
1
)
-
{
d
=
b
;
e
=
g
;
}
-
if
(
g.
sosanh
(
b
)
==
–
1
)
-
{
d
=
g
;
e
=
b
;
}
-
if
(
!
g.
sosanh
(
b
)
)
-
{
-
c.
a
[
0
]
=
0
;
n
=
1
;
-
dau
=
0
;
-
}
-
int
muon
=
0
;
-
for
(
int
i
=
0
;
i
<
e.
n
;
i
++
)
-
{
-
if
(
d.
a
[
i
]
+
muon
<=
e.
a
[
i
]
)
-
{
-
c.
a
[
i
]
=
e.
a
[
i
]
–
d.
a
[
i
]
–
muon
;
-
muon
=
0
;
-
}
-
else
-
{
-
c.
a
[
i
]
=
(
10
+
e.
a
[
i
]
–
d.
a
[
i
]
–
muon
)
;
-
muon
=
1
;
-
}
-
}
-
c.
dau
=
e.
dau
;
-
return
c
;
-
}
-
//nap chong toan tu + ————————————————————–
-
big_int big_int
::
operator
+
(
big_int b
)
-
{
-
big_int c
;
-
if
(
dau
==
b.
dau
)
c
=
congcungdau
(
b
)
;
-
else
c
=
congkhacdau
(
b
)
;
-
return
c
;
-
}
-
//nap chong toan tu (-) ——————————————————-
-
big_int big_int
::
operator
–
(
big_int b
)
-
{
-
big_int c
;
-
if
(
dau
==
b.
dau
)
c
=
congkhacdau
(
b
)
;
-
else
c
=
congcungdau
(
b
)
;
-
return
c
;
-
}
-
//phep chia tra ve thuong va so du—————————————————
-
void
big_int
::
chia
(
big_int b,big_int c,big_int
&
d
)
-
{
-
int
d1
=
b.
dau
,d2
=
c.
dau
;
-
b.
dau
=
0
;
c.
dau
=
0
;
-
if
(
d1
==
d2
)
dau
=
0
;
else
dau
=
1
;
-
if
(
!
b.
sosanh
(
c
)
)
-
{
-
a
[
0
]
=
1
;
-
n
=
1
;
-
}
-
else
-
{
-
if
(
b.
sosanh
(
c
)
==
–
1
)
-
{
d
=
b
;
n
=
1
;
dau
=
0
;
}
-
else
-
{
-
big_int e
;
-
int
i
=
b.
n
–
1
;
-
for
(
i
=
b.
n
–
1
;
i
>=
0
;
i
—
)
-
{
-
a
[
i
]
=
0
;
-
e.
dich
(
1
)
;
-
e.
a
[
0
]
=
b.
a
[
i
]
;
-
e.
xoa0
(
)
;
-
if
(
e.
sosanh
(
c
)
!
=
–
1
)
-
{
-
while
(
e.
sosanh
(
c
)
!
=
–
1
)
-
{
-
e
=
e
–
c
;
-
e.
xoa0
(
)
;
-
a
[
i
]
++
;
-
}
-
}
-
-
}
-
n
=
b.
n
;
-
(
*
this
)
.
xoa0
(
)
;
-
b.
dau
=
d1
;
c.
dau
=
d2
;
-
d
=
e
;
-
}
-
}
-
}
-
//tao menu va nhap chon muc—————————————————–
-
int
chonmenu
(
)
-
{
-
int
a
;
-
cout
<<
endl
<<
“1.phep cong”
;
endl
-
cout
<<
endl
<<
“2.phep tru”
;
endl
-
cout
<<
endl
<<
“3.phep nhan “
;
endl
-
cout
<<
endl
<<
“4.phep chia”
;
endl
-
cout
<<
endl
<<
“5.thoat”
;
endl
-
cout
<<
endl
<<
“Moi ban chon “
;
endl
-
cin
>>
a
;
-
return
a
;
-
}
-
//ham nhap 2 so lon—————————————————————
-
void
nhap
(
big_int
&
x, big_int
&
y
)
-
{
-
clrscr
(
)
;
-
cin
.
ignore
(
1
)
;
-
int
k
;
-
k
=
x.
nhap
(
)
;
-
if
(
!
k
)
-
{
-
cout
<<
endl
<<
“loi nhap “
;
endl
-
getch
(
)
;
-
exit
(
0
)
;
-
}
-
cout
<<
endl
;
x.
xoa0
(
)
;
endlx.
-
in
(
)
;
cout
<<
endl
;
x.endl
-
cin
.
ignore
(
1
)
;
-
k
=
y.
nhap
(
)
;
-
if
(
!
k
)
-
{
-
cout
<<
endl
<<
“loi nhap “
;
endl
-
getch
(
)
;
-
exit
(
0
)
;
-
}
-
cout
<<
endl
;
endl
-
y.
in
(
)
;
-
}
-
//thuc hien phep chia————————————————————–
-
void
phepchia
(
)
-
{
-
big_int x,y,z,d
;
-
nhap
(
x,y
)
;
-
cout
<<
“
\n
phep chia “
;
-
z.
chia
(
x,y,d
)
;
-
cout
<<
endl
<<
“thuong “
;
z.
in
(
)
;
endlz.
-
cout
<<
endl
<<
“du “
;
d.
in
(
)
;
endld.
-
}
-
//ham mo phong phep nhan——————————————————–
-
void
phepnhan
(
)
-
{
-
big_int x,y,z
;
-
nhap
(
x,y
)
;
-
cout
<<
endl
<<
“phep nhan “
;
endl
-
z
=
x
*
y
;
-
cout
<<
endl
<<
“tich “
;
z.
in
(
)
;
endlz.
-
}
-
//ham phep cong——————————————————————-
-
void
phepcong
(
)
-
{
-
big_int x,y,z
;
-
nhap
(
x,y
)
;
-
cout
<<
endl
<<
“phep cong “
;
endl
-
z
=
x
+
y
;
-
cout
<<
endl
<<
“tong “
;
z.
in
(
)
;
endlz.
-
}
-
//ham phep tru————————————————————————-
-
void
pheptru
(
)
-
{
-
big_int x,y,z
;
-
nhap
(
x,y
)
;
-
cout
<<
endl
<<
“phep tru “
;
endl
-
z
=
x
–
y
;
-
cout
<<
endl
<<
“hieu “
;
z.
in
(
)
;
endlz.
-
}
-
//xay dung muc chon————————————————————
-
void
giaodien
(
int
b
)
-
{
-
switch
(
b
)
-
{
-
case
1
:
-
phepcong
(
)
;
-
break
;
-
case
2
:
-
pheptru
(
)
;
-
break
;
-
case
3
:
-
phepnhan
(
)
;
-
break
;
-
case
4
:
-
phepchia
(
)
;
-
break
;
-
case
5
:
-
exit
(
0
)
;
-
default
:
-
cout
<<
endl
<<
“muc chon khong ton tai”
;
endl
-
break
;
-
}
-
}
-
//ham main—————————————————————————
-
void
main
(
)
-
{
-
int
chon
;
-
while
(
1
)
-
{
-
clrscr
(
)
;
-
chon
=
chonmenu
(
)
;
-
giaodien
(
chon
)
;
-
getch
(
)
;
-
}
-
}