2014-02-18 122 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指出的那样。 –

相关问题