Rumah > pembangunan bahagian belakang > C++ > Tukar digit pertama dan terakhir nombor

Tukar digit pertama dan terakhir nombor

PHPz
Lepaskan: 2023-08-27 17:57:07
ke hadapan
1063 orang telah melayarinya

Tukar digit pertama dan terakhir nombor

Artikel berikut memberikan penjelasan mendalam tentang kaedah yang digunakan untuk mengubah suai nombor dengan menogol bit pertama dan terakhirnya menggunakan operator bitwise ialah operator yang boleh digunakan untuk memanipulasi bit individu dalam nombor binari atau corak bit.

Pernyataan Masalah

Untuk nombor n yang diberikan, ubah suai nombor supaya bit pertama dan terakhir pengembangan binari nombor baharu diterbalikkan iaitu jika bit asal ialah 1 maka bit terbalik hendaklah 0 dan sebaliknya Semua bit antara bit pertama dan terakhir hendaklah dibiarkan tidak berubah.

Contoh

Input: 13
Salin selepas log masuk
Output: 4
Salin selepas log masuk
Terjemahan bahasa Cina bagi

Penjelasan

ialah:

Penjelasan

Peluasan binari 13 ialah 1101.

Selepas menukar bit pertama dan terakhir, sambungan menjadi 0100, iaitu bersamaan dengan 4.

Oleh itu, hasil keluaran ialah 4.

Input: 27
Salin selepas log masuk
Output: 10
Salin selepas log masuk
Terjemahan bahasa Cina bagi

Penjelasan

ialah:

Penjelasan

Peluasan binari 27 ialah 11011.

Selepas menukar bit pertama dan terakhir, sambungan menjadi 01010, iaitu bersamaan dengan 10.

Oleh itu output ialah 10.

Input: 113
Salin selepas log masuk
Output: 48
Salin selepas log masuk
Terjemahan bahasa Cina bagi

Penjelasan

ialah:

Penjelasan

Peluasan binari 113 ialah 1110001.

Apabila menogol bit pertama dan terakhir, pengembangan menjadi 0110000 iaitu bersamaan dengan 48.

Oleh itu output ialah 48.

Pendekatan Penyelesaian

Pendekatan ini menggunakan XOR bitwise dan operator shift kiri Jika bit yang sepadan bagi kedua-dua operan adalah berbeza, operator XOR bitwise menilai kepada 1, jika tidak, ia akan menilai kepada 0. Kami akan menggunakan keupayaan operator XOR bitwise bit. Contohnya, jika bit pertama nombor, n, ialah 1, maka n ^ 1 akan menyebabkan bit pertama nombor itu menjadi 0. Selain itu, jika bit pertama nombor itu ditetapkan kepada 0, operasi n ^ 1 akan menukarnya kepada 1.

Untuk membalikkan digit pertama nombor n, kami mengira n^1. Ia menjalankan operasi XOR, menyongsangkan bit n paling tidak ketara atau pertama dengan 1.

Untuk menyelak digit terakhir, kami menjana nombor k dengan set digit terakhir sahaja. Kedudukan r bit terakhir adalah sama dengan log2(n). Ini kerana bit log2(n) digunakan dalam pengembangan binari n.

Langkah berikut dilakukan untuk melaksanakan pendekatan ini −

  • Jika n = 1, paparkan 0 dan kembalikan.

  • Togol bit pertama nombor dengan mengambil XOR bagi n dengan 1.

  • Tukar digit terakhir nombor dengan XORing n dengan 1<th digit nombor itu.

  • Paparkan jawapannya.

Lari kering

Mula-mula, mari kita fahami cara pengendali bitwise XOR (^) berfungsi.

Input Bendera Input ^ Bendera
0 0 0
0 1 1
1 0 1
1 1 0

Dapat diperhatikan apabila nilai bendera ialah 1, nilai input akan diterbalikkan.

Pertimbangkan nombor 57. Peluasan binari 57 ialah 111001.

1 1 1 0 0 1

Pertimbangkan nombor 1 baharu.

0 0 0 0 0 1

Untuk menogol bit paling tidak ketara atau paling kiri, lakukan 57^1, hasilnya ialah

1 1 1 0 0 0

Nombor 111000 terhasil.

Kini, untuk menukar digit terakhir, kami mengubah suai nombor 1 supaya digit terakhir ditetapkan bukannya digit pertama. Untuk melakukan ini, kita perlu beralih 1 ke kiri dengan log2(n) tempat, atau dalam kes ini log2(57), iaitu 5. Selepas melakukan ini kami mendapat:

1 0 0 0 0 0

Pengkomputeran XOR kini memberi kita.

0 1 1 0 0 0

生成了数字01100,等于24。将其与原始数字57的二进制展开进行比较,可以观察到最终答案中的第一位和最后一位已经被切换。

因此,答案是24。

算法

函数 toggle_first_bit()

  • Compute n ^ 1

  • 更新 n

函数 toggle_last_bit()

  • 初始化 r = log2(n)

  • 初始化 k = 1 << r

  • 计算 n ^ k

  • 更新 n

Function main()

  • 初始化 n

  • 如果 (n == 1)

    • return 0;

  • Function call toggle_first_bit().

  • 调用函数 toggle_last_bit()。

  • 显示 n.

示例:C++程序

This program modifies an input number n by toggling the first and the last bit of its binary expansion. It employs bitwise operator XOR and left shift operator to achieve its goal.

// This C++ program toggles the first and the last bit of a number
#include <iostream>
#include <cmath>
using namespace std;
// this function flips the last bit of the number
// it uses the concept that a log(n) bits are used in the binary expansion of a number n
void toggle_last_bit(int& n){
   int r = log2(n); // value of r indicates the count of last bit of n
   int k; // generate a number with log(n) where only the last bit is 1 using the left shift operator
   k = 1 << r;
   n = n ^ k; // toggle the last bit of n by computing n XOR k
}

// this function flips the first bit of the number by computing n XOR 1
void toggle_first_bit(int& n){
   n = n ^ 1;
}
int main(){
   int n = 113;
   cout << "input number = 113" << endl;
   if(n == 1){
      cout << "0";
      return 0;
   }
   toggle_first_bit(n);  // function call to toggle first bit
   toggle_last_bit(n); // function call to toggle last bit
   cout << "Number after Toggle First and Last Bits of a Number: "<<n;
   return 0;
}
Salin selepas log masuk

输出

input number = 113
Number after Toggle First and Last Bits of a Number: 48
Salin selepas log masuk

Time and Space Analysis

时间复杂度 - O(1),因为该算法始终在常数时间内工作,与输入数字无关。

空间复杂度 - O(1),因为在实现中没有使用辅助空间。

Conclusion

本文讨论了一种切换数字的第一个和最后一个位的方法。为了实现这一点,我们使用了位左移运算符来生成新的位模式,使用位异或运算符来计算结果。为了更深入地理解,详细解释了方法的概念、示例的演示、使用的算法、C++程序解决方案以及时间和空间复杂度分析。

Atas ialah kandungan terperinci Tukar digit pertama dan terakhir nombor. 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