首頁 >後端開發 >C++ >檢查一個數字是否為Munchhausen數

檢查一個數字是否為Munchhausen數

PHPz
PHPz轉載
2023-09-05 22:01:071207瀏覽

檢查一個數字是否為Munchhausen數

孟希豪森數是具有獨特屬性的奇數。如果一個數字的各位數字總和(其自身的冪)等於原始數字,則該數字被認為是明克豪森數字。這些數字並不常見,而且其中許多都不為人所知。如果使用00 = 0的定義,那麼0也可以被認為是孟希豪森數。

下面的文章提供了一種方法來確定一個數字是否是明克豪森數,同時牢記明克豪森數的這些特徵。

問題陳述

目前的任務是檢查給定的整數 n 是否是 Münchhausen 數,即當每個數字取自己的冪並求和時,結果等於原始數。如果它是 Münchhausen 數,則程式應傳回 true,否則應傳回 false。

範例

Input: 1
Output: True

解釋 - (1 的 1 次方)= 11 = 1。

由於結果數等於原始數,因此 1 是明希豪森數。

Input: 1603
Output: False

解釋 − (1 的1 次方) (6 的6 次方) (0 的0 次方) (3 的3 次方) = 11 66 00 33 ≠ 1603 。

這等於 46684。由於結果數不等於原始數,因此 1603 不是明希豪森數。

Input: 3435
Output: True

解釋 − (3 的3 次方) (4 的4 次方) (3 的3 次方) (5 的5 次方) = 33 44 33 55 = 3435。

由於結果數等於原始數,因此 3435 是明希豪森數。

Input: 4335
Output: False

解釋 − (4的4次方) (3的3次方) (3的3次方) (5的5次方) = 44 33 33 55 ≠ 4335。

由於結果數字與原始數字不相等,所以4335不是一個慕尼黑數。

解決方案方法

為了判斷所提供的數字是否為明希豪森數,我們必須知道每個數字自加的結果是否與原始數字相同。可以使用以下方法來計算總和並確定結果是否與原始數字相符。

演算法

該方法包括以下步驟 -

  • 將給定的數字分解為其各個位數。

  • 將每個數字提升到自己。

  • 新增結果。

  • 將總和與原始數字進行比較。

  • 顯示答案。

虛擬程式碼

函數 is_munchhausen()

  • 初始化 sum = 0

  • 初始化 temp = n

  • #同時(溫度 > 0)

    初始化 digit = temp % 10

    sum = sum pow(數字, 數字)

    溫度=溫度/10

  • #傳回總和==n

#函數main()

  • 初始化n

  • 如果 (is_munchhausen())

    cout

  • 其他

    cout

  • #列印輸出

範例:C 程式

程式透過呼叫is_munchhausen()函數來判斷數字是否為Münchhausen數。此函數使用一個等於 n 的暫存變數和另一個變數 sum 來儲存每個數字對其自身求和的結果的總和。

在迴圈的每一次迭代中,使用‘%’運算子存取temp的每個個位數字。它會傳回數字的最右邊的數字。然後將該數字提升為它本身並加到總和中。在每次迭代的結束時,temp被除以10以存取下一個數字。循環運行直到temp > 0。

// C++ code for Münchhausen Number
#include <iostream>
#include <cmath>

using namespace std;
// this function is used to check out whether the given number is Münchhausen Number or not
bool is_munchhausen(int n){
   int sum = 0;
   int temp = n;
   while (temp > 0){
      int digit = temp % 10; //yields the rightmost digit as remainder
      sum = sum + pow(digit, digit);
      temp = temp / 10; // yields the remaining number
   }
   return (sum == n); // returns true if sum is equal to original number
}
// Driver Code
int main(){
   int n = 3253;
   cout << "input number: " << n << endl;
   if (is_munchhausen(n)){
      cout << "Münchhausen Number" << endl;
   } else {
      cout << "Non-Münchhausen Number" << endl;
   }
   return 0;
}

輸出

input number: 3253
Non-Münchhausen Number

時間與空間複雜度分析

時間複雜度 - O(log n) 時間複雜度,其中 n 是輸入參數的值。這是因為函數 is_munchhausen() 中 while 迴圈的迭代次數取決於給定數字的位數,而該位數與以10為底的 log(n) 成正比。主函數中只呼叫一次函數,因此程式的總體複雜度與 log(n) 成正比。

空間複雜度 - O(1)。無論輸入參數的大小如何,函數使用固定的記憶體來儲存整數變數sum和temp,因此其空間複雜度是恆定的。

結論

總而言之,明希豪森數是唯一的數字,表示為其自身數字總和。它們並不常見,找到它們可能是一項艱鉅的任務。本文討論的解決方法提供了一種在不使用輔助空間的情況下,在對數時間內輕鬆檢查一個數是否為 Münchhausen 的方法。本文使用各種範例深入解釋了明希豪森數的概念。使用附帶的 C 程式碼可以快速確定給定的數字是否為 Münchhausen 數字。

以上是檢查一個數字是否為Munchhausen數的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:tutorialspoint.com。如有侵權,請聯絡admin@php.cn刪除