发现了一个恶心的东西:(可以让cin的输入时间几乎等同于scanf,但是用了之后就不能用scanf了)
std::ios::sync_with_stdio(false);
参考博客:SDNUOJ——1303.A+B(高精度-大数相加)
大数相加的核心代码:(用char数组或者string存。。。)
char a[MAXN], b[MAXN];
int s[MAXN];
void sum(char *a, char *b)
{
memset(s, 0, sizeof(s));
int la = strlen(a);
int lb = strlen(b);
reverse(a, a+la);//反转
reverse(b, b+lb);
for(int i=0; i<la; ++i)
a[i] = a[i] - '0';
for(int i=0; i<lb; ++i)
b[i] = b[i] - '0';
int len = max(la, lb), ans, tem=0;//核心
for(int i=0; i<=len; ++i)
{
ans = a[i] + b[i] + tem;
s[i] = ans%10;
tem = ans/10;
}
}
求N!的核心代码:
int s[MAXN];
void N(int n)
{
s[0] = 1;
for(int i=2; i<=n; ++i)
{
int ans = 0, tem;
for(int j=0; j<MAXN; ++j)
{
tem = s[j]*i + ans;
s[j] = tem%10;
ans = tem/10;
}
}
}
我们发现,最核心的代码部分:
(A+B)
ans = a[i] + b[i] + tem;
s[i] = ans%10;
tem = ans/10;
和
(N!)
tem = s[j]*i + ans;
s[j] = tem%10;
ans = tem/10;
无论是相加还是相乘,只要是模拟,最核心的部分总是会有一些相似性的,,,,,仅供参考哦!