在用标准库求自然数范围内n!时碰到的奇怪问题.求解
原文件如下
Factor.h:
#pragma once
#include <vector>
class Factor
{
size_t n; //求n的n!
std::vector <size_t> vec; //储存结果的vector
private:
void compute(); //计算n!
void init();
Factor(Factor &);
public:
void print(); //输出
Factor(const size_t &);
~Factor(void);
};
Factor.cpp:
/----------------------------
#include "Factor.h "
#include <iostream>
#include <cmath>
#include <cmath>
#include <iomanip>
using namespace std;
typedef vector <size_t> ::iterator iter;
Factor::Factor(const size_t &nval)
{
if(nval == 0) //检验输入
{
cerr < < "Please input a integer more than zero. " < <endl;
}
n = nval;
compute();
}
Factor::~Factor()
{
}
//------------------------
void Factor::compute()
{
vec.push_back(1);
for(size_t i = 2;i <=n;++i)
{
size_t and = 0;
for(iter it = vec.begin();it != vec.end();)
{
and += i * (*it);
*it = and % 10;
++it;
if(and /= 10)
{
if(it == vec.end())
{
vec.push_back(and);
break;
}
}
}
}
}
//----------------------------
void Factor::print()
{
size_t bit = 0;
for(iter it = vec.end();it != vec.begin();--it)
{
if(bit % 50 == 0)
cout < <endl < < "第 " < <setw(3) < <(bit/50+1) < < "个50位: ";
cout < < size_t( *(it-1) );
++bit;
}
cout < <endl;
}
main.cpp:
//----------------------------------
#include "Factor.h "
#include <iostream>
using namespace std;
int main()
{
size_t anum;
cout < < "Input the number you want to compute: ";
cin > > anum;
Factor a(anum);
cout < < "the " < <anum < < "! is: " < <endl;
a.print();
return 0;
}
该程序的奇怪之处在于当n=30左右时还能正确输出结果,但是当n=40以后结果就错误了,莫名其妙?难道是vector本身什么特性的问题?
[解决办法]
if(and /= 10)
{
if(it == vec.end())
{
vec.push_back(and);
break;
}
}
问题恐怕在这里。and / 10很可能仍然大于10的。要while循环做这个操作。