题目描述
给定一个整数N(0≤N≤10000),求取N的阶乘
输入描述:
多个测试数据,每个测试数据输入一个数N
输出描述:
每组用一行输出N的阶乘
示例1
输入
1 2 3
输出
1 2 6
思路
刚开始看到这个题目,写了个直接乘过去的,是用long long 在提
交之前测了一下最大的数4000,程序输出0,稍微小
点的数字输出是负数,发现longlong完全不够用,后来我尝试使用数组去模拟乘法,但我最终还是没有写出来
于是翻看了这篇博客,他的程序非常巧妙,只使用了一个数组,于是我模仿着写了自己的程序
总结
先思考再动手,不要写到半路才发现行不通
#include <cstdio> #include <iostream> #include <cstdlib> using namespace std; #define INF 0x3f3f3f3f//可以用于memset int num[40000]; int main() { int n; while(cin>>n) { num[1]=1; int fla=1,carry=0,res;//fla记录这个大数的位数,carry记录上次乘法多余的部分 for(int i=2;i<=n;i++) { for(int j=1;j<=fla;j++) { res=i*num[j]+carry; num[j]=res%10; carry=res/10; } while(carry) { fla++; num[fla]=carry%10; carry/=10; } } for(int i=fla;i>=1;i--) printf("%d",num[i]); printf(" "); } return 0; }