문제 많은 수의 : N!

질문 기본 훈련 계승

이 질문을 제출함으로써  

자원 제약

시간 제한 : 메모리 제한을 1.0s : 512.0MB를

문제 설명

  양의 정수를 입력 N- 출력 N- ! 값.
  상기 N- ! =. 3. 1 * 2 * * * ... N- .

알고리즘 설명

  N- ! 클 수 있고, 컴퓨터의 제한된 범위의 정수에 의해 표현 될 수 있으며, 상기 방법은 고정밀 계산의 사용을 필요로한다. 배열 사용 것은 큰 정수 나타내는데 , [0]를 나타내는 의 자릿수, [. 1]을 나타내는 열을, 등등.   로 , A는 정수 승산 (k)를 배열된다 각 요소를 승산 K 해당 메모 처리 수행한다.   먼저 곱함으로써 3 (2)에 의한 1로 설정 한 다음,,, N 얻어진다 N ! 값.

입력 형식

  입력은 양의 정수를 포함 N- , N- <= 1000.

출력 형식

  의 출력 N- 형 ! 정확한 값.

샘플 입력

(10)

샘플 출력

3628800

내가 시뮬레이션에 기록했다 있도록 할 수있는 직접 사용 파이썬에 대한 생각,하지만 등록 많은 수의, C ++입니다.

벡터 <INT>를 사용하지.

핸드 카운트 승산 AXB이 후, 승산을위한 B의 각 한 쌍의 후 이송 한 후, 상기 몰드를 터치 반송 휴대 답을 유지하기 위해,이 데이터가 긴 긴 버스트 않을 것이다 (보증 승산 휴식)이다 다음에, 동작 벡터를 이용하여 전방 위치 왕 직접 데이터 삽입 Qianmian하고 출력 최종 답변을 삽입한다.

코드 :

#include<iostream>
#include<string>
#include<map>
#include<set>
#include<vector>
using namespace std;
const int maxn = 10005;

int main() {
	int n;
	cin >> n;
	vector<int>v;
	v.push_back(1);
	
	for(int i=2;i<=n;i++){
		int len=v.size();
		for(int j=0;j<len;j++){
			v[j]*=i;
		}
		
		int jinwei=0;
		for(int j=len-1;j>=0;j--){
			int temp=jinwei+v[j];
			jinwei=temp/10;
			v[j]=temp%10;
		}
		while(jinwei){
			v.insert(v.begin(),jinwei%10);
			jinwei/=10;
		}
	}
	
	for(int i=0;i<v.size();i++)
		cout<<v[i];


	return 0; 
}

 

게시 된 123 개 원래 기사 · 원 찬양 83 ·은 10000 +를 볼

추천

출처blog.csdn.net/tsam123/article/details/104185397