2014-02-23 37 views
-1

我正在處理this問題。這裏是我的代碼Array Issues C++

#include<iostream> 
#include<limits> 
using namespace std; 
int main(){ 

    int numCases,num,zeroCount=0,mulFive,temp,i=0; 
    cin>>numCases; 
    //cout<<numeric_limits<int>::max()-1000000000; 
    int solutionArray[numCases]; 
    temp=numCases; 
    while(numCases--) 
     { 
      cin>>num; 
      mulFive=5; 
      while(num/mulFive!=0) 
       { 
        zeroCount=zeroCount+ (num/mulFive); 
        mulFive=mulFive*5; 
       } 
      solutionArray[i]=zeroCount; 
      i++; 
      //cout<<zeroCount; 
     } 
    for(int k=0;k<temp;k++) 
     cout<<solutionArray[k]<<endl; 

    return 0; 
} 

現在,當我簡單地輸出使用我所評論上面我得到正確的答案,但同時加入了相同的解決陣列有事,我也得到了錯誤的答案cout<<zeroCount;命令的結果對於一些輸入。對於上面問題鏈接中給出的例子,這裏是我的輸出。

6 
3 
60 
100 
1024 
23456 
8735373 
0 
14 
38 
291 
6152 
2189989 

這裏是我輸入單個數字時的輸出。

1 
8735373 
2183837 

可能是什麼問題?

+0

請問知道自己在做什麼? – OJFord

+0

@OllieFord它應該計算'N!'的十進制表示中尾隨零的數量。 – Barmar

回答

1

它與數組無關。問題在於,您不會在每個案例之間重置zeroCount,因此您要將每個案例的結果添加到上一個案例的結果中。

#include<iostream> 
#include<limits> 
using namespace std; 
int main(){ 

    int numCases,num,zeroCount,mulFive,temp,i=0; 
    cin>>numCases; 
    //cout<<numeric_limits<int>::max()-1000000000; 
    int solutionArray[numCases]; 
    temp=numCases; 
    while(numCases--) 
     { 
      cin>>num; 
      zeroCount = 0; 
      mulFive=5; 
      while(num/mulFive!=0) 
       { 
        zeroCount=zeroCount+ (num/mulFive); 
        mulFive=mulFive*5; 
       } 
      solutionArray[i]=zeroCount; 
      i++; 
      //cout<<zeroCount; 
     } 
    for(int k=0;k<temp;k++) { // Always put bodies of if/while/for in braces, even if it's one statement 
     cout<<solutionArray[k]<<endl; 
    } 

    return 0; 
} 
+0

我在競爭性編碼方面沒有太多經驗。所以你可以指導我更有效地解決這個問題。 – fts

+1

我不知道這是什麼最好的算法。如果您希望人們批評您的代碼並提出改進建議,請嘗試codereview.stackexchange.com。 – Barmar