第一个点AC,第二第三个点WA,第四个点超时。希望大家看看我这哪里写的不合适?
查看原帖
第一个点AC,第二第三个点WA,第四个点超时。希望大家看看我这哪里写的不合适?
471730
Fierte楼主2021/5/28 17:05
#include<cstdio>
#include<iostream>
#include<algorithm>

using namespace std;

string sum(string a,string b){
	long long length_1,length_2;
	string s;
	length_1 = a.size();
	length_2 = b.size();
	if (length_1 > length_2){
		for (long long i=0;i < length_1-length_2;i++)
			b = '0'+b;
		length_2 = length_1;
	}
	else if (length_1 < length_2){
		for (long long i=0;i < length_2-length_1;i++)
			a = '0'+a;
		length_1 = length_2;
	}
	long long p,q=0;
	char c;
	for (long long i=length_1-1;i >= 0;i--){
		p = a[i]-'0'+b[i]-'0'+q;
		if (p < 10){
			c = p+'0';
			s = c+s;
			q = 0;
		}
		else{
			c = p-10+'0';
			s = c+s;
			q = 1;
		}
	}
	if (q == 1)
		s = '1'+s;
	return s;
}

string cheng(string a,string b){
	string s;string d;
	long long length_1,length_2,flag,flag_1,flag_2,q,p=0,count=0;
	char c;
	s = '0';
	flag_1 = flag_2 = 1;
	if (a[0] == '-'){
		flag_1 = -1;
		a.erase(a.begin());
	}
	if (b[0] == '-'){
		flag_2 = -1;
		b.erase(b.begin());
	}
	flag = flag_1*flag_2;
	length_1 = a.size();
	length_2 = b.size();
	for (long long i = length_2-1;i >= 0;i--){
		for (long long j =length_1-1;j >= 0;j--){
			q = (b[i]-'0')*(a[j]-'0')+p;
			p = q/10;
			q = q%10;
			c = q+'0';
			d = c+d;
		}
		if (p > 0){
			c = p+'0';
			d = c+d;
		}
		for (long long k = 0;k < count;k++)
			d = d+'0';
		s = sum(s,d);
		count++;
	}
	return s;
}

int main(){
	//freopen("xx.txt","r",stdin);
	int n;
	string s,t,a,b;
	cin >> n;
	s = '0';
	t = '1';
	a = '1';
	b = '1';
	for (int i = 1;i <= n;i++){
		t = cheng(t,a);
		a = sum(a,b);
		s = sum(s,t); 
	}
	cout << s << endl;
	return 0; 
} 
2021/5/28 17:05
加载中...