高精度加法以及高精度乘法( )
题目

简略的题目,简略的算法,不一样的数据,此题的数据很显然不能用longlong或者unsignedlonglong类型,因为还是会上溢,题目也说了,要求高精度算法
输入输出
没啥好说的( )
在做题之前,我们先来看看什么是高精度计算,为什么需要高精度计算?
高精度计算

那么我们粗略的知道了,对于高精度计算,对应着大整数之间或者对精度高要求的计算。
此题便要我们实现高精度乘法以及加法。
代码如下
#include <stdio.h>
#define LEN 100
int main()
{
int n = 0;
scanf("%d", &n);
int a[LEN] = { 0 };
int b[LEN] = { 0 };
a[1] = 1;
b[1] = 1;
for (int i = 2; i <= n; i++)
{
for (int j = 1; j < LEN; j++) //从最高位开始乘
{
a[j] *= i;
}
for (int j = 1; j < LEN; j++) //进位
{
if (a[j] >= 10)
{
a[j + 1] += a[j] / 10;
a[j] %= 10;
}
}
for (int j = 1; j < LEN; j++) //从最低位开始加
{
b[j] += a[j];
}
for (int j = 1; j < LEN; j++) //进位
{
if (b[j] >= 10)
{
b[j + 1] += b[j] / 10;
b[j] %= 10;
}
}
}
int flag = 0;
for (int j = LEN - 1; j >= 1; j--)
{
if (b[j] != 0 || flag)
{
printf("%d", b[j]);
flag = 1;
}
}
return 0;
}
做法就是每次乘完都来次进位,模仿竖式运算( )
最后,附上AC

1034

被折叠的 条评论
为什么被折叠?



