2017-05-25 55 views
0

考慮到我們有81,讓我們分割它:8和1.如果我們得到這個數字的總和,它會是9,對吧?讓我們來看看9的任何冪是81.是的,9的平方是81.ab是一個數字,找到(a + b)^ n = ab

我想找到所有這些數字,直到它達到10000.我一直在編碼,但有一些我總是卡住。這是我的代碼;

var results = []; 
for (var num = 0; num < 82; num++) { 
    var splittedNumbersArray = num.toString(10).split("").map(Number); 
    var sum = splittedNumbersArray.reduce(sumof, 0); 
    var powersArray = []; 
    for (var power = 0; power < 11; power++) { 
     var powerNumber = Math.pow(sum, power); 
     powersArray.push(powerNumber); 
    } 
    if (controlSolution(powersArray, num) === true) { 
     results.push(num); 
    } 
} 

function sumof(a, b) { 
    return a + b; 
} 

function controlSolution(a, v) { 
    for (var index = 0; index < a.length; index++) { 
     if (a[index] === v) { 
      return true; 
     } 
    } 
    return false; 
} 

當我調試通過控制檯的代碼,它說變量num是82,但81後的for循環應該停止了吧?我也檢查過,它在81後停止了! (我瞭解這部分內容)

爲什麼說我82輸入console.log(sayi)?我認爲這就是爲什麼我的kontrolet功能不起作用。

當我檢查powersArray如果它包括num,我已經看到了,它是。但爲什麼results沒有數字81?

我該如何解決這個問題?感謝您的回答。

+0

因爲邏輯是...將數字增加1並存儲該值,運行檢查以查看它是否有效....如果數字無效,則不會將數字還原回來。 – epascarello

+0

當sayi = 82時,即在達到81之後,循環停止。 – user3382203

+7

我並不是說這是錯誤的,但用本地語言而不是英語來命名變量和函數使得理解代碼的功能變得更加困難,而當您向其他不需要幫助的人尋求幫助時,這可能會產生問題說那種語言,例如在StackOverflow上。 – Frxstrem

回答

1

但for循環應停止81後,對吧?我也檢查了它,它在81之後停止了 !

它的確如此。但是sayi在每次循環迭代後遞增。所以,當sayi81

  1. 81 < 82是真實的,所以循環執行
  2. 循環體運行
  3. 它完成時,sayi增加爲82
  4. 檢查for循環條件 - 82 < 82爲false,因此循環終止,我們繼續到下一行。

如果您現在打印sayi,它將是82。但是最後的循環使用的值是81,正如您所期望的那樣。

這是正常行爲。請參閱https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Loops_and_iteration#for_statement,它描述了for循環的工作原理。請注意,最後步驟

更新表達incrementExpression,如果有一個,則執行, 並且控制返回到步驟2。

步驟2是條件的計算結果爲。

+0

我明白爲什麼它顯示82,但爲什麼我的代碼不'工作?我檢查了'powersArray'和'num',數組包含數字,但爲什麼它不會推? –

+0

我不確定是什麼問題 - 當我運行代碼81在'results'時,是你想要的嗎?看到這裏:http://jsbin.com/debuxolubu/edit?js,console –

+0

是的,這就是我想要的。我再次嘗試了代碼,它工作。謝謝你的一切。 –

相關問題