질문 기본 훈련 계승
자원 제약
시간 제한 : 메모리 제한을 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;
}