【发布时间】:2014-02-18 10:08:30
【问题描述】:
我在codechef上练习编程,有一个练习“智能阶乘”,
问题是:
输入 一个整数 t,1
输出
对于输入时给出的每个整数 n,显示一个值为 n 的行! 示例
示例输入:
4
1
2
5
3
样本输出:
1
2
120
6
我写了我的 fact.cpp,但它的输出很奇怪。有时它是正确的,但有时它的输出是这样的:
6
100
150485922355943662067262689687459530715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000(suppose it's right)
(FOLLOWING IS NOT MY INPUT,IT'S OUTPUT)
1
1
1
1
1
$
什么问题,我想不通。
这是我的代码:
#include <iostream>
#include <vector>
using namespace std;
void mult(vector<int>& a, int n); // vector = a*n
int main(int argc,char** argv)
{
int numOfLine;
cin>> numOfLine;
while(numOfLine)
{
int num; //Sometimes fails here!!!! Why??????
cin >> num;
vector<int> res;
res.push_back(1);
for(int i=0;i<num;++i)
{
mult(res,i+1);
}
int n = res.size();
for(;n>0;n--)
{
cout << res[n-1];
}
cout << endl;
numOfLine--;
}
}
void mult(vector<int>& a, int n)
{
int s = a.size();
int j; //accumulator
a.push_back(0); //n<=100
a.push_back(0);
for(int i=0;i<s;++i) //first mult every digit
{
a[i] = a[i]*n;
}
//second shift left
for(int i=0;i<s;++i)
{
int tmp = a[i];
j = i;
while(tmp)
{
if(j==i)
{
a[j++] = tmp%10;
tmp /= 10;
}
else
{
a[j++] += tmp%10;
tmp /= 10;
}
}
}
//pop_back beginning zero
int t = s+1;
while(!a[t])
{
a.pop_back();
t--;
}
}
【问题讨论】:
-
TLDR 但您应该始终初始化您的变量,并且您不应该对向量和循环做如此复杂的事情。
-
这会有所帮助,如果您将代码格式化为“合理”:-)
-
我将从查看输出 100 的案例开始,因为它显然是错误的,而且调试起来也不是很乏味。
-
仔细查看
mult。您可能缺少一些“携带管理”。我运行了您的代码并得到了错误的 99 响应!和 100!在 MINGW,我没有得到错误的格式化输出。生成大因子here。
标签: c++