关于C语言两个大数相乘
发布网友
发布时间:2022-05-01 22:58
我来回答
共1个回答
热心网友
时间:2022-06-24 16:03
//#include
<stdafx.h>
//此头文件不可丢
#include
<stdio.h>
#include
<string.h>
#define
N
200
//预编译将后面数组的的长度定义为200;
int
main()
{
void
GetDigits(int
a[],
char
s[]);
void
multiply(int
a[],
int
b[],
int
c[]);
char
s1[N],
s2[N];
//起初定义两个字符串数组s1和s2,用来存储两个相乘的大数;
int
i,
j,
a[N],
b[N],
c[N
*
2];
printf("\n
input
number
a:
");//输入两个数字的字符串;
scanf("%s",
s1);
printf("\n
input
number
b:
");
scanf("%s",
s2);
//把输入的字符串,按位存放到数组
GetDigits(a,
s1);
GetDigits(b,
s2);
multiply(a,
b,
c);
//找到最高位
j
=
N
*
2
-
1;
while(c[j]
==
0)
j--;
//打印计算结果
printf("\n
%s
*
%s=",
s1,
s2);
for(i
=
j;
i
>=
0;
i--)
printf("%d",
c[i]);
return
0;
}
//下面Getsights函数的目的是把字符串形式的数字按位存放到数组
void
GetDigits(int
*a,
char
*s)
{
int
i;
char
digit;
int
len
=
strlen(s);
for(i
=
0;
i
<
N;
i++)
a[i]
=
0;
for(i
=
0;
i
<
len;
i++)
{
digit
=
s[i];
a[len
-
1
-
i]
=
digit
-
'0';
}
}
//把a*b的结果存储到数组c中,按位表示;
void
multiply(int
*a,
int
*b,
int
*c)
{
int
i,
j;
for(i
=
0;
i
<
N
*
2;
i++)
c[i]
=
0;
//先把结果数组设置为0;
for(i
=
0;
i
<
N;
i++)
for(j
=
0;
j
<
N;
j++)
c[i
+
j]
+=
a[i]
*
b[j];
//
处理进位
for(i
=
0;
i
<
N
*
2
-
1;
i++)
{
c[i
+
1]
+=
c[i]
/
10;
//进位累加到高位
c[i]
=
c[i]
%
10;
//该位的最后结果
}
}