当我想敲高精加


天道好轮回,苍天饶过谁
今天机房里昊哥敲高精时我不厚道地笑了
结果好家伙,晚上就遇上一道用高精的题

我原来的代码
#include
using namespace std;
int main(){
	char m[11111],n[11111];
	int a[11111]={0},b[11111]={0},c[11111]={0},i,x,y,flag,d=0;
	scanf("%s%s",m,n);
	x=strlen(m);
	y=strlen(n);
	for(i=0;i=0;i--){
		cout<
改进版代码
int n,f[5010][5010],len;
void jiafa(int k)//高精加法
{
	for(int i=1; i<=len; i++)//两数相加
	    f[k][i]=f[k-1][i]+f[k-2][i];
	for(int i=1; i<=len; i++)//进位
	{
		if(f[k][i]>=10)
		{
			f[k][i+1]+=f[k][i]/10;
			f[k][i]=f[k][i]%10;
			if(f[k][len+1]>0)len++;
		}
	}
}
int main()
{
	cin>>n;
	len=1;
	f[1][1]=1;
	f[2][1]=2;
	for(int i=3; i<=n; i++)//开始计算
	    jiafa(i);
	for(int i=len; i>=1; i--)//输出
	    cout<
原来要用字符串,堪称出bug神器, 改进版妙就妙在用二维数组替换了字符串那个恶心玩意。 一维记录进位,一维记录本位数字

f[1--k][i]num
f[k][1--i]
进位