Rumah > pembangunan bahagian belakang > C++ > Semak sama ada nombor adalah nombor Munchhausen

Semak sama ada nombor adalah nombor Munchhausen

PHPz
Lepaskan: 2023-09-05 22:01:07
ke hadapan
1215 orang telah melayarinya

Semak sama ada nombor adalah nombor Munchhausen

Nombor Munchhausen ialah nombor ganjil dengan sifat unik. Nombor dianggap sebagai nombor Munchhausen jika jumlah digitnya (kuasanya) adalah sama dengan nombor asal. Nombor ini jarang berlaku dan kebanyakannya tidak diketahui. Jika takrifan 00 = 0 digunakan, maka 0 juga boleh dianggap sebagai nombor Munchhausen.

Artikel berikut menyediakan kaedah untuk menentukan sama ada sesuatu nombor ialah nombor Munchhausen, dengan mengambil kira ciri-ciri nombor Munchhausen ini.

Pernyataan Masalah

Tugas semasa adalah untuk menyemak sama ada integer n yang diberikan ialah nombor Münchhausen, iaitu apabila setiap nombor dinaikkan kepada kuasanya sendiri dan dijumlahkan, hasilnya adalah sama dengan nombor asal. Program ini harus kembali benar jika ia adalah nombor Münchhausen, sebaliknya palsu.

Contoh

Input: 1
Output: True
Salin selepas log masuk

Penjelasan - (1 hingga kuasa pertama) = 11 = 1.

Oleh kerana nombor yang terhasil adalah sama dengan nombor asal, 1 ialah nombor Munchhausen.

Input: 1603
Output: False
Salin selepas log masuk

Penjelasan − (1 hingga kuasa 1) + (6 hingga kuasa ke-6) + (0 hingga kuasa ke-0) + (3 hingga kuasa ke-3) = 1< super>1 + 66 + 00 + 33 ≠ 1603.

Ini bersamaan dengan 46684. Oleh kerana nombor yang terhasil tidak sama dengan nombor asal, 1603 bukanlah nombor Munchhausen.

Input: 3435
Output: True
Salin selepas log masuk

Penjelasan − (3 kepada kuasa ke-3) + (4 kepada kuasa ke-4) + (3 kepada kuasa ke-3) + (5 kepada kuasa ke-5) = 3< super>3 + 44 + 33 + 55 = 3435.

Oleh kerana nombor yang terhasil adalah sama dengan nombor asal, 3435 ialah nombor Munchhausen.

Input: 4335
Output: False
Salin selepas log masuk

Penjelasan − (4 kepada kuasa ke-4) + (3 kepada kuasa ke-3) + (3 kepada kuasa ke-3) + (5 kepada kuasa ke-5) = 44 + 33 + 33 + 55 ≠ 4335.

Oleh kerana nombor yang terhasil tidak sama dengan nombor asal, 4335 bukan nombor Munich.

Kaedah penyelesaian

Untuk mengetahui sama ada nombor yang diberikan adalah nombor Münchhausen, kita mesti tahu sama ada hasil penambahan setiap nombor pada dirinya adalah sama dengan nombor asal. Anda boleh menggunakan kaedah berikut untuk mengira jumlah dan menentukan sama ada hasilnya sepadan dengan nombor asal.

Algoritma

Kaedahnya merangkumi langkah-langkah berikut -

  • Pecah nombor yang diberikan kepada digit individunya.

  • Naikkan setiap nombor kepada dirinya sendiri.

  • Tambah hasil.

  • Bandingkan jumlah dengan nombor asal.

  • Tunjukkan jawapan.

pseudokod

Fungsi ialah_munchhausen()

  • Jumlah permulaan = 0

  • Mulakan suhu = n

  • serentak (suhu > 0)

    Inisialisasi digit = suhu % 10

    jumlah = jumlah + pow(nombor, nombor)

    Suhu=Suhu/10

  • Jumlah pulangan==n

Fungsi utama()

  • Memulakan n

  • jika (is_munchhausen())

    cout <<"Nombor Münchhausen"<<“明希豪森数”

  • Lain-lain

    cout << “Nombor Hausen bukan mazhab”

  • Cetak

Contoh: program C++

Program ini menentukan sama ada nombor adalah nombor Münchhausen dengan memanggil fungsi is_munchhausen(). Fungsi ini menggunakan pembolehubah sementara bersamaan dengan n dan satu lagi jumlah pembolehubah untuk menyimpan hasil tambah bagi setiap nombor yang dijumlahkan ke atas dirinya sendiri.

Dalam setiap lelaran gelung, gunakan operator ‘%’ untuk mengakses setiap digit tunggal suhu. Ia mengembalikan digit paling kanan nombor itu. Nombor itu kemudiannya dinaikkan kepada dirinya sendiri dan ditambah kepada jumlah keseluruhan. Pada akhir setiap lelaran, temp dibahagikan dengan 10 untuk mengakses nombor seterusnya. Gelung berjalan sehingga suhu > 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;
}
Salin selepas log masuk

Output

input number: 3253
Non-Münchhausen Number
Salin selepas log masuk

Analisis kerumitan masa dan ruang

Kerumitan Masa - O(log n) kerumitan masa, dengan n ialah nilai parameter input. Ini kerana bilangan lelaran gelung while dalam fungsi is_munchhausen() bergantung pada bilangan digit dalam nombor yang diberikan, yang berkadar dengan log(n) asas 10. Fungsi ini dipanggil sekali sahaja dalam fungsi utama, jadi kerumitan keseluruhan program adalah berkadar dengan log(n).

Kerumitan ruang - O(1). Fungsi ini menggunakan memori tetap untuk menyimpan jumlah pembolehubah integer dan temp, jadi kerumitan ruangnya adalah malar tanpa mengira saiz argumen input.

Kesimpulan

Untuk meringkaskan, nombor Münchhausen ialah nombor unik yang dinyatakan sebagai jumlah nombornya sendiri. Mereka tidak biasa dan mencarinya boleh menjadi tugas yang sukar. Penyelesaian yang dibincangkan dalam artikel ini menyediakan cara untuk menyemak dengan mudah sama ada sesuatu nombor adalah Münchhausen dalam masa logaritma tanpa menggunakan ruang tambahan. Artikel ini menerangkan konsep nombor Munchhausen secara mendalam menggunakan pelbagai contoh. Gunakan kod C++ yang disertakan untuk menentukan dengan cepat sama ada nombor yang diberikan ialah nombor Münchhausen.

Atas ialah kandungan terperinci Semak sama ada nombor adalah nombor Munchhausen. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:tutorialspoint.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan