前3个wa,最后一个tle,明明样例都对了
查看原帖
前3个wa,最后一个tle,明明样例都对了
1157709
zengzeyu楼主2024/4/21 12:24
#include<bits/stdc++.h>
using namespace std;

string add(string a,string b){
    string baik="",baika="";
    int ai,bi,pla,carry,add_ab,i = 0;
    int alen = a.length();
    int blen = b.length();
    for(int i = 0;i < 200-alen;i++){
        a = "0" + a;   
    }
    
    for(int i = 0;i < 200-blen;i++){
        b = "0" + b;
    }    
    
    for(int i = 199;i>=0;i--){
        ai = a[i] - '0';
        bi = b[i] - '0';
        add_ab = ai + bi + carry;
        pla = add_ab % 10;
        /*
        if(pla == 0 && carry == 0){
        	break;
		}
		*/
		
        baik = to_string(pla) + baik;
		carry = (add_ab - pla)/10; 
    }
    //cout << a << " + " << b << " = " << baik << endl;
    for(;baik[i] == '0';i++){}
    //cout<<i<<endl;
	for(;i<=199;i++){
		baika = baika + baik[i];
	}
	baik = baika;
    return baik;
}
string mul(string a,string b){
	string mul_ab = "",pro_p = "0";
	int alen = a.length(),blen = b.length(),carry,pla;
	for(int i = blen-1;i >= 0;i--){
		carry = 0;
		mul_ab = "";
		int vb = b[i]-'0';
		for(int j = alen-1;j >= 0;j--){
			int va = a[j]-'0';
			int mab = va * vb + carry;
			pla = mab % 10;
			
   			mul_ab =  to_string(pla)+mul_ab;
   			carry = (mab -pla) / 10 ;
			//carry = 0;
		}
		if(carry != 0){
			mul_ab = char(carry + '0')+mul_ab;
		}    
		for(int j = 1;j < blen - i;j++){
			mul_ab = mul_ab + "0";
		}
		
		pro_p = add(pro_p, mul_ab);
		   
		mul_ab = "";	
	}
	return pro_p;
}

string calcfac(int num){
	string res = to_string(num);
	if(num == 1){
		return res;
	}
	
	res = mul(res, calcfac(num-1));
	return res;
}

int main(){
	
	int n = 0;
	string s = "0";
	cin>>n;
	//if(n==6) {
	//	cout << to_string(873) << endl;
	//	return 0;
	//}
	
	//string fac = "1";
	
	for(int i = 1; i <= n; i++){
		//fac = mul(fac, to_string(i));
		//cout << i << " "<<fac << " " << s << endl;
		s = add(calcfac(i),s);
	}
	cout<<s;
	
}   
2024/4/21 12:24
加载中...