【编程之美】2.2不要被阶乘吓到
题目: 1:给定一个整数N,那么N的阶乘N!末尾有多少个0?例如N = 10,N!= 3628800,末尾有两个0. 2:求N!的二进制表示中最低位1的位置。 问题一: 题目解析: 这道题如果直接求N!的话也可以,不过万一溢出了怎么办?即使定义longlong类型的也不合适。那
题目:
1:给定一个整数N,那么N的阶乘N!末尾有多少个0?例如N = 10,N!= 3628800,末尾有两个0.
2:求N!的二进制表示中最低位1的位置。
问题一:
题目解析:
这道题如果直接求N!的话也可以,不过万一溢出了怎么办?即使定义longlong类型的也不合适。那么就要找寻其中的规律,一般这类题目都可以通过分析,找到一个很简单的方法。
思路一:
我们想想0是怎么来的?乘以10就增加一个0,而10可以通过2*5的来。好了,我们将N!表达式表达出来,看能获得多少个2*5。N! = 2^x * 3^y * 5^z... 由于2比5小,所以x比z要大。所以看N!中有多少个5就可以了。
int Count(int n) { int num = 0; for(int i = 1;i <br> 思路二: <p><span>我们可以利用公式Z = [N/5] + [N/(5^2)] + [N/(5^3)] +....</span></p> <p><span>这个公式表达什么意思呢?N/5表示从1-N中有多少个数是5的倍数,那么这些数,每一个都贡献一个5;好了但是对于25会贡献两个,在除以5的时候,已经算进去1个,那么N/(5^2)的时候,看看有多少是25的倍数,也算一下,这时将25中的另一个5给算进去了;同理对于75,当我们N/75的时候,正好把三个5全算进去……通过这个方法,更简化程序的实现。</span></p> <p></p><pre class="brush:php;toolbar:false">int Count1(int n) { int num = 0; while(n){ num += n/5; //这种方法更简洁,避免了附设变量 n = n/5; } return num; }
问题二:
说白了,问题2跟问题1是一样的,求N!2的倍数。
思路一:
根据上题的情况,写出如下表达式求表达式N! = 2^x * 3^y * 5^z... 我们要求x的值为多少。也可以通过遍历1-N一个一个求解
int Count2(int n) { int num = 0; for(int i =0;i > 1; } } return num; }
思路二:
类似问题一中的公式,我们也可以写出Z = [N/2] + [N/(2^2)] + [N/(2^3)] +....
int Count3(int n) { int num = 0; while(n){ n = n >> 1; num += n; //这句话写在下面,更好 } return num; }
思路三:
N!含有质因数2的个数,还等于N减去N的二进制表示中1的数目。——这是一种巧妙的方法,是根据Z = [N/2] + [N/(2^2)] + [N/(2^3)] +....运算得到的,因为除以2,相当于右移一位,对于11011我们有:
Z = 1101 + 110 + 11 + 1 = (1000 + 100 + 1) + (100 + 10) + (10 +1) + 1
= 1111 + 111 + 1 = (10000 - 1) + (1000 - 1) + (10 - 1) + (1 - 1) = 11011 - (N二进制中1的个数)
相关题目:
给定整数n,判断它是否为2的方幂。
(2的方幂为2^X。所以表示为二进制的时候,只有一位为1,那么利用判断二进制的个数的方法来判断: n>0 && ((n && (n-1)) == 0))

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Cara mengalih keluar nilai pendua daripada tatasusunan PHP menggunakan ungkapan biasa: Gunakan ungkapan biasa /(.*)(.+)/i untuk memadankan dan menggantikan pendua. Lelaran melalui elemen tatasusunan dan semak padanan menggunakan preg_match. Jika ia sepadan, langkau nilai jika tidak, tambahkannya pada tatasusunan baharu tanpa nilai pendua.

1. Pengaturcaraan boleh digunakan untuk membangunkan pelbagai perisian dan aplikasi, termasuk tapak web, aplikasi mudah alih, permainan dan alat analisis data. Bidang aplikasinya sangat luas, meliputi hampir semua industri, termasuk penyelidikan saintifik, penjagaan kesihatan, kewangan, pendidikan, hiburan, dll. 2. Pembelajaran pengaturcaraan boleh membantu kita meningkatkan kemahiran menyelesaikan masalah dan kemahiran berfikir logik. Semasa pengaturcaraan, kita perlu menganalisis dan memahami masalah, mencari penyelesaian dan menterjemahkannya ke dalam kod. Cara berfikir ini boleh memupuk kebolehan analitikal dan abstrak kita dan meningkatkan keupayaan kita untuk menyelesaikan masalah praktikal.

Bina aplikasi berasaskan pelayar dengan Golang Golang digabungkan dengan JavaScript untuk membina pengalaman bahagian hadapan yang dinamik. Pasang Golang: Lawati https://golang.org/doc/install. Sediakan projek Golang: Cipta fail bernama main.go. Menggunakan GorillaWebToolkit: Tambahkan kod GorillaWebToolkit untuk mengendalikan permintaan HTTP. Cipta templat HTML: Cipta index.html dalam subdirektori templat, yang merupakan templat utama.

Python ialah bahasa pengenalan pengaturcaraan yang ideal untuk pemula melalui kemudahan pembelajaran dan ciri yang berkuasa. Asasnya termasuk: Pembolehubah: digunakan untuk menyimpan data (nombor, rentetan, senarai, dll.). Jenis data: Mentakrifkan jenis data dalam pembolehubah (integer, titik terapung, dll.). Operator: digunakan untuk operasi matematik dan perbandingan. Aliran kawalan: Kawal aliran pelaksanaan kod (penyataan bersyarat, gelung).

Pythonmemperkasakan pemula dalam menyelesaikan masalah.Sintaksnya yang mesra pengguna, perpustakaan luas, dan ciri-ciri seperti pembolehubah, pernyataan bersyarat, dan pembangunan kod yang cekap boleh dilonggarkan. Daripada mengurus data untuk mengawal aliran program dan melaksanakan tugasan berulang, Pythonprovid

Teka-teki pengaturcaraan C++ meliputi algoritma dan konsep struktur data seperti jujukan Fibonacci, faktorial, jarak Hamming, nilai maksimum dan minimum tatasusunan, dll. Dengan menyelesaikan teka-teki ini, anda boleh menyatukan pengetahuan C++ dan meningkatkan pemahaman algoritma dan kemahiran pengaturcaraan.

C ialah pilihan ideal untuk pemula untuk mempelajari pengaturcaraan sistem Ia mengandungi komponen berikut: fail pengepala, fungsi dan fungsi utama. Program C mudah yang boleh mencetak "HelloWorld" memerlukan fail pengepala yang mengandungi pengisytiharan fungsi input/output standard dan menggunakan fungsi printf dalam fungsi utama untuk mencetak. Program C boleh disusun dan dijalankan dengan menggunakan pengkompil GCC. Selepas anda menguasai asas, anda boleh beralih kepada topik seperti jenis data, fungsi, tatasusunan dan pengendalian fail untuk menjadi pengaturcara C yang mahir.

Pengendalian ralat dalam Go termasuk ralat pembalut dan ralat buka bungkus. Ralat pembalut membenarkan satu jenis ralat dibalut dengan yang lain, memberikan konteks yang lebih kaya untuk ralat itu. Kembangkan ralat dan lalui rantaian ralat bersarang untuk mencari ralat peringkat terendah untuk penyahpepijatan yang mudah. Dengan menggabungkan kedua-dua teknologi ini, keadaan ralat boleh dikendalikan dengan berkesan, menyediakan konteks ralat yang lebih kaya dan keupayaan penyahpepijatan yang lebih baik.
