2014-02-18 121 views
0

我在練上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--; 
    } 
} 
+1

TLDR但你應該_always_初始化變量,你不應該用你的載體和循環做這樣的事情過於複雜。 –

+0

如果你將代碼格式設置爲「合理的」,這將有所幫助:-) –

+0

我會先看看輸出爲100的情況,因爲它顯然是錯誤的,調試起來也不是非常繁瑣。 – molbdnilo

回答

-1

在這裏你去:

#include <iostream> 

int factorial(int num){ 
    if(num==1) return num; 
    return num*factorial(num-1); 
} 

int main(){ 
    int lines; 
    std::cin >> lines; 
    for(int i=0; i<lines; i++){ 
     int n; 
     std::cin >> n; 
     std::cout << factorial(n) << std::endl; 
    } 
} 
+1

ohh剛剛注意到給出的數字可能高達100,上面的數字不會超過大約15 –

+0

問題依然存在,解決方案應該採用n == 100,正如@Dima Maligin指出的那樣。 –

相關問題