完全按照自己的想法做的,所以不太成熟,希望有兴趣的朋友提出意见!
#
include<stdio.h>
#
include<string.h>
![大数四则运算(C语言) 大数四则运算(C语言)](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9pbWdzLzUvMS8wLzIvMTYvNjgxMDM1NWMyZjc4YzEyZTkxYjc5OTdhOGU4YzU4M2EuanBl.jpe?w=700&webp=1)
//最大数长度
#
define MAX 200
![大数四则运算(C语言) 大数四则运算(C语言)](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9pbWdzLzUvMS8wLzIvMTYvNjgxMDM1NWMyZjc4YzEyZTkxYjc5OTdhOGU4YzU4M2EuanBl.jpe?w=700&webp=1)
//读入输入的大整数,a[0]存储大整数的长度
void read(int
*
a)
{
unsigned int i
,
len;
char s[
MAX
];
scanf(
"
%s
"
,&
s);
a[
0
]
=
strlen
(s);
for
(i
=
0
; i
<
a[
0
]; i
++
)
{
if
(s[i]
>=
'
0
'
&&
s[i]
<=
'
9
'
)
a[a[
0
]
-
i]
=
s[i]
-
'
0
'
;
else
{
printf
(
"
输入出错!
"
);
exit
(
0
);
}
}
}
![大数四则运算(C语言) 大数四则运算(C语言)](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9pbWdzLzUvMS8wLzIvMTYvNjgxMDM1NWMyZjc4YzEyZTkxYjc5OTdhOGU4YzU4M2EuanBl.jpe?w=700&webp=1)
//
加法
void add(int
*
a
,
int
*
b
,
int
*
c)
{
int k
=
0
,
i
,
max_len;
max_len
=
a[
0
];
if
(b[
0
]
>
max_len)
max_len
=
b[
0
];
for
(i
=
0
; i
<
max_len; i
++
)
{
k
=
k
+
a[i
+
1
]
+
b[i
+
1
];
c[i
+
1
]
=
k
%
10
;
k
=
k
/
10
;
}
if
(k
!=
0
)
{
c[i
+
1
]
=
k;
c[
0
]
=
i
+
1
;
for
(; i
<
MAX
-
2
; i
++
)
c[i
+
2
]
=
0
;
}
else
{
c[
0
]
=
i;
for
(; i
<
MAX
-
1
; i
++
)
c[i
+
1
]
=
0
;
}
}
![大数四则运算(C语言) 大数四则运算(C语言)](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9pbWdzLzUvMS8wLzIvMTYvNjgxMDM1NWMyZjc4YzEyZTkxYjc5OTdhOGU4YzU4M2EuanBl.jpe?w=700&webp=1)
//
比较两个数组表示的整数的大小,a>b返回1,否则返回0
int compare(int
*
a
,
int
*
b)
{
int i;
if
(a[
0
]
>
b[
0
])
return
1
;
else
if
(a[
0
]
==
b[
0
])
{
for
(i
=
0
; i
<
a[
0
]; i
++
)
{
if
(a[a[
0
]
-
i]
>
b[b[
0
]
-
i])
return
1
;
}
return
2
;
}
else
return
0
;
}
![大数四则运算(C语言) 大数四则运算(C语言)](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9pbWdzLzUvMS8wLzIvMTYvNjgxMDM1NWMyZjc4YzEyZTkxYjc5OTdhOGU4YzU4M2EuanBl.jpe?w=700&webp=1)
//
减法
void subABigerB(int
*
a
,
int
*
b
,
int
*
c)
{
int i;
for
(i
=
1
; i
<
a[
0
]
+
1
; i
++
)
{
if
(a[i]
>=
b[i])
{
//
k = 0;
c[i]
=
a[i]
-
b[i];
}
else
{
//
k = 1;
while
(a[i
+
1
]
==
0
)
i
++
;
a[i
+
1
]
--
;
c[i]
=
a[i]
+
10
-
b[i];
}
}
c[
0
]
=
a[
0
];
}
![大数四则运算(C语言) 大数四则运算(C语言)](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9pbWdzLzUvMS8wLzIvMTYvNjgxMDM1NWMyZjc4YzEyZTkxYjc5OTdhOGU4YzU4M2EuanBl.jpe?w=700&webp=1)
![大数四则运算(C语言) 大数四则运算(C语言)](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9pbWdzLzUvMS8wLzIvMTYvNjgxMDM1NWMyZjc4YzEyZTkxYjc5OTdhOGU4YzU4M2EuanBl.jpe?w=700&webp=1)
//
减法
void sub(int
*
a
,
int
*
b
,
int
*
c)
{
int i;
for
(i
=
0
; i
<
MAX
; i
++
)
{
c[i]
=
0
;
}
if
(compare(a
,
b)
==
1
)
{
subABigerB(a
,
b
,
c);
//
打印
printf
(
"
Difference:
"
);
i
=
c[
0
];
while
(c[i]
==
0
)
i
--
;
for
(; i
>
0
; i
--
)
{
printf
(
"
%d
"
,
c[i]);
}
printf
(
"
"
);
}
else
if
(compare(a
,
b)
==
0
)
{
subABigerB(b
,
a
,
c);
//
打印
printf
(
"
Difference:
"
);
i
=
c[
0
];
while
(c[i]
==
0
)
i
--
;
printf
(
"
-
"
);
for
(; i
>
0
; i
--
)
{
printf
(
"
%d
"
,
c[i]);
}
printf
(
"
"
);
}
else
//
打印
printf
(
"
Difference: 0
"
);
}
![大数四则运算(C语言) 大数四则运算(C语言)](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9pbWdzLzUvMS8wLzIvMTYvNjgxMDM1NWMyZjc4YzEyZTkxYjc5OTdhOGU4YzU4M2EuanBl.jpe?w=700&webp=1)
//
数组与单个整数的乘法
void singleMul(int
*
a
,
int m
,
int
*
c)
{
int k
=
0
,
i;
for
(i
=
0
; i
<
a[
0
]; i
++
)
{
k
=
k
+
a[i
+
1
]
*
m;
c[i
+
1
]
=
k
%
10
;
k
=
k
/
10
;
}
if
(k
!=
0
)
{
c[i
+
1
]
=
k;
c[
0
]
=
i
+
1
;
}
else
c[
0
]
=
i;
}
![大数四则运算(C语言) 大数四则运算(C语言)](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9pbWdzLzUvMS8wLzIvMTYvNjgxMDM1NWMyZjc4YzEyZTkxYjc5OTdhOGU4YzU4M2EuanBl.jpe?w=700&webp=1)
//
整数数组之间的乘法
void mul(int
*
a
,
int
*
b)
{
int k
=
0
,
i
,
c[
MAX
]
,
d[
MAX
]
,
e[
MAX
]
,
max_len;
int f
=
0
,
j;
memset(c
,
0
,
sizeof
(c));
memset(d
,
0
,
sizeof
(d));
memset(e
,
0
,
sizeof
(e));
max_len
=
a[
0
];
if
(b[
0
]
>
max_len)
max_len
=
b[
0
];
//
d = singleMul(a, b[1]);
for
(i
=
0
; i
<
b[
0
]; i
++
)
{
singleMul(a
,
b[i
+
1
]
,
c);
if
(i
-
1
>=
0
)
d[
0
]
=
d[
0
]
-
1
;
d[
1
]
=
d[
0
];
add(
&
d[
1
]
,
c
,
d);
e[i
+
1
]
=
d[
1
];
}
for
(j
=
0
; j
<
d[
0
]
-
1
; i
++,
j
++
)
{
e[i
+
1
]
=
d[
2
+
j];
}
e[
0
]
=
i;
//
打印
for
(i
=
e[
0
]; i
>
0
; i
--
)
{
printf
(
"
%d
"
,
e[i]);
}
printf
(
"
"
);
}
![大数四则运算(C语言) 大数四则运算(C语言)](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9pbWdzLzUvMS8wLzIvMTYvNjgxMDM1NWMyZjc4YzEyZTkxYjc5OTdhOGU4YzU4M2EuanBl.jpe?w=700&webp=1)
![大数四则运算(C语言) 大数四则运算(C语言)](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9pbWdzLzUvMS8wLzIvMTYvNjgxMDM1NWMyZjc4YzEyZTkxYjc5OTdhOGU4YzU4M2EuanBl.jpe?w=700&webp=1)
int main()
{
int a[
MAX
]
,
b[
MAX
]
,
c[
MAX
]
,
a_len
,
b_len
,
max_len;
int i;
//
清零
memset(a
,
0
,
sizeof
(a));
memset(b
,
0
,
sizeof
(b));
memset(c
,
0
,
sizeof
(c));
read(a);
read(b);
//
加法
add(a
,
b
,
c);
printf
(
"
Sum:
"
);
//
打印
for
(i
=
c[
0
]; i
>
0
; i
--
)
{
printf
(
"
%d
"
,
c[i]);
}
printf
(
"
"
);
//
printf("%d",compare(a, b));
//减法
sub(a
,
b
,
c);
//
乘法
printf
(
"
Product:
"
);
mul(a
,
b);
//
system("pause");
}