其实spoj的题还是挺有意思的。
题目大意:很简单,求n!,你最大100
思路:100!得有一百多位,LL也不行,只能用字符串模拟乘法。
实现:注意进位可能有多次
代码:
//FCTRL2 - Small factorials
#include<iostream>
using namespace std;
#define MAXN 1000
#define LL long long
int n, t;
int main() {
scanf("%d", &t);
while(t--) {
scanf("%d", &n);
if(n==0) {
cout << 1 << endl;
}else {
char num[MAXN];
int len = 1;
num[0] = '1'; num[len] = 0;
for(int i=2; i<=n; i++) {
int carry = 0;
int j = 0;
while(j<len) {
int mul = (num[j]-'0')*i + carry;
num[j] = mul%10 + '0';
carry = mul/10;
j++;
}
// printf("carry = %d\n", carry);
while(carry){
num[len++] = carry%10+'0';
num[len] = 0;
carry /=10;
}
// printf("i=%d, num=%s\n", i,num);
}
for(int i=len-1; i>=0; i--) {
putchar(num[i]);
}
putchar('\n');
}
}
return 0;
}
网友评论