Nhân hai số nhị phân trong python

Trong toán học và điện tử kỹ thuật số, số nhị phân là một số được biểu thị bằng hệ thống số cơ số 2 hoặc hệ thống số nhị phân. Hệ thống này chỉ sử dụng hai ký hiệu. thường là 1 (một) và 0 (không)

Dữ liệu thử nghiệm.
Nhập số nhị phân đầu tiên. 110
Nhập số nhị phân thứ hai. 101

Giải pháp mẫu

Mã Java

import java.util.Scanner;
public class Exercise18 {
 public static void main(String[] args)
 {
  long binary1, binary2, multiply = 0;
  int digit, factor = 1;
  Scanner in = new Scanner(System.in);
  System.out.print("Input the first binary number: ");
  binary1 = in.nextLong();
  System.out.print("Input the second binary number: ");
  binary2 = in.nextLong();
  while (binary2 != 0)
  {
   digit = (int)(binary2 % 10);
   if (digit == 1) 
   {
    binary1 = binary1 * factor;
    multiply = binaryproduct((int) binary1, (int) multiply);
   } 
   else
   {
    binary1 = binary1 * factor;
   }
   binary2 = binary2 / 10;
   factor = 10;
  }
  System.out.print("Product of two binary numbers: " + multiply+"\n");
 }
 static int binaryproduct(int binary1, int binary2) 
 {
  int i = 0, remainder = 0;
  int[] sum = new int[20];
  int binary_prod_result = 0;

  while (binary1 != 0 || binary2 != 0) 
  {
   sum[i++] = (binary1 % 10 + binary2 % 10 + remainder) % 2;
   remainder = (binary1 % 10 + binary2 % 10 + remainder) / 2;
   binary1 = binary1 / 10;
   binary2 = binary2 / 10;
  }
  if (remainder != 0)
  {
   sum[i++] = remainder;
  }
  --i;
  while (i >= 0) 
  {
   binary_prod_result = binary_prod_result * 10 + sum[i--];
  }
  return binary_prod_result;
 }
 }
 

Đầu ra mẫu

Input the first binary number: 110                                                                            
Input the second binary number: 101                                                                           
Product of two binary numbers: 11110 

Sơ đồ

Nhân hai số nhị phân trong python

Sơ đồ. sản phẩm nhị phân()

Nhân hai số nhị phân trong python

Trình soạn thảo mã Java

Đóng góp mã và nhận xét của bạn thông qua Disqus

Trước. Viết chương trình Java để cộng hai số nhị phân.
Tiếp theo. Viết chương trình Java chuyển một số thập phân sang số nhị phân.

Mức độ khó của bài tập này là gì?

Dễ dàng trung bình khó

Kiểm tra kỹ năng Lập trình của bạn với bài kiểm tra của w3resource



Chia sẻ Hướng dẫn / Bài tập này trên. FacebookTwitter

Java. Lời khuyên trong ngày

cái đuôi

Trả về tất cả các phần tử trong một mảng ngoại trừ phần tử đầu tiên

Trả về mảng. copyOfRange(1) nếu độ dài của mảng lớn hơn 1, ngược lại, trả về toàn bộ mảng

Xét thuật toán nhân hai số nhị phân sau. điều kiện tiên quyết. x và y là các mảng bit nhị phân. PO S T C O N D I T I O N. Trả về kết quả một mảng bit nhị phân bằng tích của x và y. def M U L T I P L Y (x, y). kết quả = [0]; . nếu y[i] == 1. kết quả = B I N A R Y A D D (kết quả, x) x. append(0) #thêm số 0 vào cuối x trả về kết quả Q. Nếu chúng ta đo độ phức tạp bằng số phép toán bit, thì độ phức tạp trong trường hợp xấu nhất của M U L T I P L Y là gì? . Hỏi. Có cách nào hiệu quả hơn để thực hiện phép nhân không?

2

Phép nhân chia để trị Lưu ý rằng 010111 = 010000 + 111 = 010 · 2n/2 + 111 011101 = 011000 + 101 = 011 · 2n/2 + 101 i. e. , chúng ta có thể chia một số nhị phân thành n/2 bit cao và n/2 bit thấp. Hỏi. 010111 × 011101 được viết dưới dạng bit cao và bit thấp là gì?

010111 × 011101 = 010 × 011 · (2n/2 )2 + ˙ n/2 ) (010 × 101 + 111 × 011)(2 +111 × 101

Q. Độ phức tạp của phép nhân một số x với 2n/2 là bao nhiêu? . Nói chung, x×y theo bit thấp {xl , yl } và bit cao {xh , yh } là. x × y = xh yh · 2n + (xl yh + xh yl ) · 2n/2 + xl yl Vì vậy, chúng ta có thể định nghĩa một thuật toán nhân, chia để trị, đệ quy. 3

điều kiện tiên quyết. x và y đều là các vectơ bit nhị phân có độ dài n (n lũy thừa 2). PO S T C O N D I T I O N. Trả về một vectơ bit nhị phân bằng tích của x và y. R E C M U L T I P L Y ( x, y). nếu (len(x) == 1). return ([x[0]*y[0]]) xh xl yh yl a b c d

= = = =

= = = =

x[n/2. n] x[0. n/2] x[n/2. n] x[0. n/2]

RE C A C RE A RE C

M U L T I P L Y (xh, M U L T I P L Y (xh, M U L T I P L Y (xl, M U L T I P L Y (xl,

yh) y) yh) y)

b = B I N A R Y A D D (b,c) a = S H I F T (a,n) b = S H I F T (b,n/2) return B I N A R Y A D D (a,b,d) end R E C M U L T I P L Y Q. Mối quan hệ lặp lại cho độ phức tạp của R E C M U L T I P L Y là gì? . Độ phức tạp trong trường hợp xấu nhất của R E C M U L T I P L Y là gì? . 4

Một thuật toán nhân chia và chinh phục tốt hơn Nhớ lại chúng ta muốn tính toán. xh yh · 2n + (xl yh + xh yl ) · 2n/2 + xl yl Quan sát [Gauss] xl yh + xh yl = (xh + xl )(yh + yl ) − xh yh − xl yl Q. Tại sao điều này đúng? . Điều này giúp chúng ta như thế nào? . 1. xh yh 2. xl yl 3. (xh + xl )(yh + yl ) Do đó, n

xy = xh yh 2n + [(xh + xl )(yh + yl ) − xh yh − xl yl ]2 2 + xl yl dẫn đến một thuật toán nhân chia để trị mới. 5

Nhân đệ quy – Lấy 2 PR E C O N D I T I O N. x và y đều là các mảng bit nhị phân có độ dài n, n lũy thừa 2. PO S T C O N D I T I O N. Trả về một mảng bit nhị phân bằng tích của x và y. R E C M U L T I P L Y 2( x, y). nếu (len(x) == 1). quay lại (x[0]*y[0]) xh xl yh yl

= = = =

x[n/2. n] x[0. n/2] x[n/2. n] x[0. n/2]

p1 = R E C M U L T I P L Y 2(xh, yh) p2 = R E C M U L T I P L Y 2(xh+xl, yh+yl) p3 = R E C M U L T I P L Y 2(xl, yl) p2 = B I N A R Y A D D (p2,-p1, -p3) p2 = S H I F T (p2, n . Mối quan hệ lặp lại cho R EC M ULTIPLY 2 là gì? . Điều này có thực sự tốt hơn T (n) = 4T (n/2) + O (n) không? . Xem bài tập 1. 6

Tính đúng đắn của chương trình – Chương 2 Chứng minh tính đúng đắn của chương trình thực sự có nghĩa là chứng minh Nếu một số điều kiện P thỏa mãn khi bắt đầu thực hiện chương trình, thì • chương trình sẽ kết thúc • một số điều kiện Q sẽ thỏa mãn khi kết thúc. Điều kiện P được gọi là điều kiện tiên quyết. Điều kiện Q được gọi là hậu điều kiện. Hãy coi đây là một hợp đồng, nếu điều kiện tiên quyết được thỏa mãn thì chương trình bắt buộc phải đáp ứng điều kiện sau. Ghi chú. chúng tôi không quan tâm đến lỗi thời gian chạy (e. g. tràn, chia cho số không). Chúng dễ phát hiện hơn. Hai trường hợp chúng ta sẽ xem xét. • chương trình đệ quy (chương trình có phương thức đệ quy) • chương trình lặp (chương trình có vòng lặp)

7

Tính đúng đắn của các chương trình đệ quy Đọc sách, trang 47–53. Trong phần này, chúng ta xem xét cách chứng minh các chương trình đúng có chứa các phương thức đệ quy. Chúng tôi làm điều này bằng cách sử dụng quy nạp đơn giản hoặc đầy đủ đối với các đối số của phương thức đệ quy

Cách thực hiện chứng minh Để chứng minh một chương trình đệ quy đúng (với một điều kiện tiên quyết và một điều kiện sau) chúng ta thường 1. chứng minh phương pháp đệ quy hoàn toàn đúng 2. chứng minh chương trình chính hoàn toàn đúng

8

Một ví dụ đầu tiên

lớp công khai EXP { int E X P O (u,v){ if v == 0 return 1;

Ghi chú. chương trình chính ở đây không làm gì ngoài việc gọi phương thức trên x và y Bổ đề. Với mọi m , n ∈ N, phương thức E XPO(m , n ) kết thúc và trả về giá trị m n. Bằng chứng. trang tiếp theo Định lý. Chương trình EXP (hoàn toàn) đúng với tiền điều kiện x, y ∈ N và hậu điều kiện z = xy. Bằng chứng. ngay lập tức từ bổ đề. 9

bổ đề. Với mọi m , n ∈ N, phương thức E XPO(m , n ) kết thúc và trả về giá trị m n. Bằng chứng. Ta chứng minh bằng quy nạp hoàn toàn rằng P(n ) đúng với mọi n ∈ N, trong đó P(n ) đúng với mọi m ∈ N, E XPO(m, n) chấm dứt và trả về mn. Giả sử rằng n ∈ N, và P(i ) đúng với mọi i ∈ N, 0 ≤ i < n. Vì vậy, chúng ta có điều đó với mọi i, m ∈ N, i < n. E XPO(m, i) kết thúc và trả về mi. Để chứng minh P(n ) có 3 trường hợp cần xét. Trường hợp 1. n = 0. Với mọi m , E XPO(m, 0) kết thúc và trả về 1 = m 0. Trường hợp 2. n > 0 n là số lẻ. Từ đoạn mã này, với bất kỳ m , khi n > 0 và n là số lẻ, • E XPO(m , n ) hoạt động bằng cách gọi E XPO(m, n DIV 2) đầu tiên, • sau đó gọi S QUARE trên kết quả, • và . Hỏi. Tại sao điều này đúng?

10

(*)

Trường hợp 2 tiếp. Vì n là số lẻ nên (n − 1) (n − 1) ∈ N và < n. 2 2 Vì vậy, chúng ta có thể áp dụng (*), E XPO(m, n DIV 2) kết thúc và trả về m(n−1)/2. n chia 2 =

Phương thức S QUARE luôn kết thúc và trả về (m(n−1)/2 )2 = m(n−1)

Do đó, E XPO(m , n ) kết thúc và trả về m · m(n−1) = mn

trường hợp 3. n > 0 n chẵn. tương tự như trường hợp trước Ta kết luận rằng bổ đề đúng với mọi n và m

11

Nhớ lại thuật toán nhân đệ quy của chúng tôi. điều kiện tiên quyết. x và y đều là các vectơ bit nhị phân có độ dài n (n lũy thừa 2). PO S T C O N D I T I O N. Trả về một vectơ bit nhị phân bằng tích của x và y. R E C M U L T I P L Y (x, y). nếu (len(x) == 1). return ([x[0]*y[0]]) xh xl yh yl a b c d

= = = =

= = = =

x[n/2. n] x[0. n/2] x[n/2. n] x[0. n/2]

RE C A C RE A RE C

M U L T I P L Y (xh, M U L T I P L Y (xh, M U L T I P L Y (xl, M U L T I P L Y (xl,

yh) y) yh) y)

b = B I N A R Y A D D (b,c) a = S H I F T (a,n) b = S H I F T (b,n/2) return B I N A R Y A D D (a,b,d)

12

Hãy chứng minh rằng R E C M U L T I P L Y 2(x,y) thực sự trả về tích của x và y. Chứng minh bằng quy nạp hoàn toàn. 1. Xác định P(n). Rec Multiply 2( x, y) đáp ứng hậu điều kiện, i. e. , kết thúc và trả về tích của x và y trong đó x và y là số nhị phân n bit. RTP. P(n) đúng với mọi n chẵn ∈ N và n = 1. 2. trường hợp cơ sở. n = 1 Sau đó xy được trả về. 3. Giả thuyết quy nạp. Giả sử rằng với n tùy ý ∈ N, n chẵn, P(k) đúng với mọi k < n, k lũy thừa 2. 4. Bước quy nạp. Theo IH, mỗi lệnh gọi Rec Multiply 2 sẽ trả về kết quả của các tham số một cách chính xác. Điều này được đảm bảo vì mỗi tham số là lũy thừa của 2 và < n. theo quan sát của Gauss, tổng p1 · 2n + (p2 − p1 − p3 ) · 2n/2 + p3 = xy. Do đó, Rec Multiply 2 kết thúc và trả về xy đáp ứng điều kiện sau

Làm thế nào chúng ta có thể nhân hai bộ số nhị phân?

Các bước để nhân nhị phân là gì? . Trước tiên, chúng ta cần nhân từng chữ số của một số nhị phân với từng chữ số của một số nhị phân khác. Rồi cộng tất cả lại với nhau để có kết quả cuối cùng .

Có phương pháp nhân nào trong Python không?

multiply() trong Python. numpy. Hàm multiply() được sử dụng khi chúng ta muốn tính phép nhân của hai mảng . Nó trả về tích của mảng1 và mảng2, theo từng phần tử.

Hệ số nhân 2 bit là gì?

Mô tả mạch . Các sản phẩm một phần sau đó được tính trọng số và cộng lại để có được sản phẩm tổng thể. multiplying each bit of the multiplicand by each bit of the multiplier to form the partial products. The partial products are then weighted and summed to get the overall product.

Chúng ta có thể nhân hai bộ trong Python không?

Nhân hai danh sách bằng vòng lặp for . Với mục đích này, chúng ta có thể sử dụng Chức năng Zip. Hàm zip() trong python có thể kết hợp nội dung của 2 lần lặp trở lên. with every iteration, we can multiply the elements from both lists. For this purpose, we can use Zip Function. The zip() function in python can combine the contents of 2 or more iterables.