2016-06-08 139 views
2

最近我參加了一個採訪,在那裏我被要求編寫一個函數來查找數字中的一個術語以及它發生的次數。在沒有使用數組的情況下在另一個數字中找到一個數字

比方說,長期= 51,數= 164518351,所以51並不在數量退出與它發生的2倍,所以返回2.

我的解決方案 - 轉換的數量和期限轉換爲字符串,並取代在數字串中輸入「A」,然後最後在數字串中計算「A」的數字。他讓我解決不使用字符串,所以我給了一個數組方法。但他說我不能使用數組。所以我想知道是否有其他方法可以做到這一點?我不想要確切的代碼或算法,我只想知道我們可以採取的各種方法以最短的時間複雜度來解決這個問題。

+1

您是否熟悉'mod/div 10'方法從整數末尾讀出單個數字? –

+0

我需要一種方法,像我們可以做的其他事情來解決它。我給了Strings,Arrays解決方案我的代碼工作正常,但他需要其他方法來解決這個特定的問題。 。 @SeekAddo –

回答

5

,你可以嘗試這樣的事情

int term_count = 0; 
while(number > 0){ 
    if(number % 100 == term) 
     term_count++; 
    number = number/10 
} 

這將檢查號碼的最後兩位數字是等於項,並繼續這樣做忽視了一些每個單位數字。

像這樣

164518351%100 == 51

16451835%100 == 51

1645183%​​100 == 51

164518%100 == 51

....

當然

,在這裏,我知道,期限是兩個數字,所以我用100國防部,如果你不知道,你可以通過

找到的術語數字,然後模數數

10 ^(num_of_digits_in_term)

你可以找到的位數這樣

int tempTerm = term, termDigitCount = 0; 
while(tempTerm > 0){ 
    termDigitCount++; 
    tempTerm /= 10; 
} 

// 51 > 0 -> termDigitCount = 1 
// 1 > 0 -> termDigitCount = 2 
// 0 > 0 -> exit while loop 

,並在結束時,如果該term_count是0,那麼在數量沒有的項目的出現

希望這會有所幫助。

P.S - 解決方案可能在語法上不正確,因爲OP不想要確切的答案。只是邏輯。

+0

如果該號碼是動態輸入的,該怎麼辦?你怎麼能爲此寫一個靜態的mod分割函數?如果他輸入term = 512,並且number = 36512723512 –

+1

如果您需要做的是計算該術語的數字位數,這應該很容易。然後用10^pow除以pow =位數的位數。 – Vucko

+0

這段時間的測試是不正確的,因爲你永遠不會達到0它應該是數字> 1 –

相關問題