社区讨论

50 TLE!!!dalao救救蒟蒻吧~~~呜呜呜~~~~

P1009[NOIP 1998 普及组] 阶乘之和参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@lte8otvx
此快照首次捕获于
2024/03/05 18:40
2 年前
此快照最后确认于
2024/03/05 20:27
2 年前
查看原帖
C
#include <bits/stdc++.h>
using namespace std ;

int n , num ;
string ans ;		

string mul( string x , string y )
{
	int a[10005] = {} , b[10005] = {} , c[10000005] = {} ;
	int k = 1 ;
	for( int i = x.size() - 1 ; i >= 0 ; i -- )
	{
		a[k] = x[i] - '0' ;
		k ++ ;
	}
	k = 1 ;
	for( int i = y.size() - 1 ; i >= 0 ; i -- )
	{
		b[k] = y[i] - '0' ;
		k ++ ;
	}
	for( int i = 1 ; i <= y.size() ; i ++ )
	{
		for( int j = 1 ; j <= x.size() ; j ++ )
		{
			c[i + j - 1] += b[i] * a[j] ;
			c[i + j] += c[i + j - 1] / 10 ;
			c[i + j - 1] %= 10 ;
		}
	}
	string z = "" ;
	int len  = x.size() + y.size() ;
	while( c[len] == 0 && len > 1 ) len -- ;
	for( int i = len ; i >= 1 ; i -- )
	{
		z = z + char( c[i] + '0' ) ;
	}
	return z ;
}

string fac( int n )
{
	string result = "1" ;
	for( int i = 1 ; i <= n ; i ++ )
	{
		string a ;
  		int temp = i ;
		while( temp )
		{
			a = ( char )( temp % 10 + '0') + a ;
			temp /= 10 ;
		}
		result = mul( result , a ) ;
	}
	return result ;
}

string add( string x , string y )
{
	int a[1005] = {} , b[1005] = {} , c[1005] = {} ;
	int k = 1 ;
	for( int i = x.size() - 1 ; i >= 0 ; i -- )
	{
		a[k] = x[i] - '0' ;
		k ++ ;
	}
	k = 1 ;
	for( int i = y.size() - 1 ; i >= 0 ; i -- )
	{
		b[k] = y[i] - '0' ;
		k ++ ;
	}
	int len = max( x.size() , y.size() ) ;
	for( int i = 1 ; i <= len ; i ++ )
	{
		c[i] = a[i] + b[i] + c[i] ;
		c[i + 1] = c[i] / 10 ;
		c[i] = c[i] % 10 ;
	}
	string z = "" ;
	if( c[len + 1] != 0 ) len ++ ;
	for( int i = len ; i >= 1 ; i -- )
	{
		z = z + char( c[i] + '0' ) ;
	}
	return z ;
}

int main( void )
{
	cin >> num ;
	for( int i = 1 ; i <= num ; i ++ )
	{
		ans = add( ans , fac( i ) ) ;
	}
	cout << ans ;
	return 0 ;
}

回复

0 条回复,欢迎继续交流。

正在加载回复...