N!
本来挺常规的一个问题,之前也做过类似的,但是这次想用vector试试就报错了。疑惑。
问题描述:
把原来写的已知长度的数组改为了动态数组vector,然后在进行4的阶乘程序就开始崩溃了。
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n;
while(scanf("%d",&n)!=EOF){
if(n==1){
printf("1\n");
}
vector <int> vec;//接收数组
int i=0;//因为不知道长度,所以用下标访问vector。
vec.push_back(1);//第一项是1
int w=1;//现在已经有的位数
int temp;//临时储存
for(int i=2;i<=n;i++){
int num =0;//临时储存,进位
for(int j =0;j<w;j++){
temp=vec[j]*i+num;
vec[j]=temp%10;
num=temp/10;//去尾
}
while(num){
vec[w]=num%10;
num/=10;
w++;
}
}
for(auto it:vec){
cout<<it;
}
cout<<endl;
}
return 0;
}
原因分析:
没想出来那儿出错了。所以先存在这儿。
解决方案:
老老实实换成熟悉的常规定长数组就AC了。
int main()
{
int nums[100000];
int n;
nums[0]=1;
while(scanf("%d",&n)!=EOF){
int nums[100000];
nums[0]=1;
int temp=0;
int i;//循环变量
int w=1;//w是位,个位为0
for(i=2;i<=n;i++)//该for循环对于大于2的阶乘才奏效。
{
int num=0;
for(int j=0;j<w;j++)
{
temp=nums[j]*i+num;
nums[j]=temp%10;
num=temp/10;
}
while(num)
{
nums[w]=num%10;
num/=10;
w++;
}
}
for(int i =w-1;i>=0;i--){
cout<<nums[i];
}
cout<<endl;
}
return 0;
}