我在練上codechef編程,有一個鍛鍊的 「智能因子」,爲什麼輸出有時會失敗
的問題是:
輸入 整數t,1 < = T < = 100,表示測試用例的數量,後面是t行,每行包含一個整數n,1 < = n < = 100。
輸出
對於每個整數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但你應該_always_初始化變量,你不應該用你的載體和循環做這樣的事情過於複雜。 –
如果你將代碼格式設置爲「合理的」,這將有所幫助:-) –
我會先看看輸出爲100的情況,因爲它顯然是錯誤的,調試起來也不是非常繁瑣。 – molbdnilo