2011-08-17 59 views
0

這是我講的 http://projecteuler.net/index.php?section=problems&id=99冪通過磨邊(項目歐拉99)提示我的解決方案

我的代碼將編譯並正常運行的問題。我猜計算是在搞亂的地方。它告訴我,第633行是最大的(該項目歐拉說是不正確的)。

#include <iostream> 
#include <string> 
#include <fstream> 

using namespace std; 

int poww(int base, int exp); 
int main() 
{ 
    //ignore messy/unused variables. I am desperate 
    int lineNumber = 0; 
    string line; 
    int answerLine = 0; 
    int max =0; 
    int lineNum = 0; 
    int answer =0; 
    ifstream inFile; 
    size_t location; 
    string temp1,temp2; 
    int tempMax = 0; 
    int base,exp = 0; 
    inFile.open("C:\\Users\\myYser\\Desktop\\base_exp.txt"); 
    while(getline(inFile,line)) 
    { 
     lineNumber++; 
     location = line.find(","); 
     temp1 = line.substr(0,(int(location))); 
     temp2 = line.substr((int(location)+1),line.length()); 
     //cout << temp1 << " " << temp2 << endl; 
     base = atoi(temp1.c_str()); 
     exp = atoi(temp2.c_str()); 
     tempMax= poww(base,exp); 

     if (tempMax > max){ 
      max = tempMax; 
      answer = base; 
      answerLine = lineNumber; 
     } 

    } 


    cout << answer << " " << answerLine; 

    cin.get(); 
    return 0; 
} 
int poww(int base, int exp) 
{ 
    int result = 1; 
    while (exp) 
    { 
     if (exp & 1) 
      result *= base; 
     exp >>= 1; 
     base *= base; 
    } 

    return result; 
} 
+0

您需要定義「不正確」。 –

+0

@tedled?什麼是不正確的?它不能編譯?它崩潰?它的工作原理但不正確?它運行時會起火嗎?請具體說明您的問題。 –

+0

已添加。 「我的程序說633行是最大的」。 – tedled

回答

4

您是否注意到它說了300萬位以上的數字?你在考慮這個問題。

你需要想出一個方法來大幅縮減這些數字,所以你仍然可以比較它們。換句話說,您可能希望研究比較結果數量的方式。

一個提示將被登錄(一個^ B)= B *日誌的(a)

+0

是的,這就是爲什麼我通過調整例程來使用指數運算。 – tedled

+0

不,重點在於您需要更大的號碼類型來存儲答案。 – Nayuki

+0

這並不改變int不能容納300萬位的事實。你需要想出一種方法來大幅縮減這些數字,以便你仍然可以比較它們。換句話說,您可能希望研究比較結果數量的方式。 –

3

一個32位int只能容納2^32個值,並且其中一些的在某一點神奇地轉負..