1.快读。
读入、输出优化 - OI Wiki (oi-wiki.org)
C/C++中最快、最简洁的read()快读(卡常数)方法_c++ 提高read读写速率-CSDN博客
inline void read(int& a)
{
int s = 0, w = 1;
char ch = getchar();
while (ch < '0' || ch>'9')
{
if (ch == '-')
w = -1;
ch = getchar();
}
while (ch >= '0' && ch <= '9')
{
s = s * 10 + ch - '0';
ch = getchar();
}
a = s * w;
}
2.高精度压缩
高精度算法全套(加,减,乘,除,全网最详细)_哔哩哔哩_bilibili
讲得很仔细,且有例题讲解
高精度压缩核心代码:
c[i]+=a[i]+b[i];
c[i+1]=c[i]/10;//进位
c[i]=c[i]%10;
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cstdlib>
using namespace std;
char s1[505],s2[505];
int a[505],b[505],c[505];
int main()
{
int za,zb,zc;
scanf("%s",s1);
scanf("%s",s2);
za=strlen(s1);
zb=strlen(s2);
//例如:s1:1234,s2:827.不方便进行挨个数组元素相加,(竖式计算)
//故进行转置,将字符转换为数字
for(int i=0;i<za;i++)
a[za-i]=s1[i]-'0';
for(int i=0;i<zb;i++)
b[zb-i]=s2[i]-'0';
zc= max(za,zb)+1;
for(int i=1;i<=zc;i++)
{
c[i]+=a[i]+b[i];
c[i+1]=c[i]/10;
c[i]=c[i]%10;
}
if(c[zc]==0) zc--;//删除前导0.例如计算过来是012,实则是12,zc长度减1
for(int i=zc;i>0;i--)
{
printf("%d",c[i]);
}
return 0;
}