Sử dụng vòng lặp for trong phép nhân Ấn độ
Cho em sai ở đâu ạ,em cảm ơn
#include<iostream>
using namespace std;
int m,n;
int main()
{
cout<<"Nhap m va n";
cin>>m>>n;
for (int kq=0;m=0;m>>=1,n<<=1){if(m%2) kq += n}
cout<<"Ket qua la:"<<kq;
}
Phương pháp Ấn độ cho phép nhân 2 số nguyên bằng cách chỉ dùng các phép toán nhân đôi, chia đôi và cộng. Các phép nhân đôi và chia đôi thực chất là phép toán dịch bit về bên trái (nhân) hoặc bên phải (chia) 1 bit. Đây là các phép toán cơ sở trong bộ xử lý, do vậy dùng phương pháp này sẽ làm cho việc nhân các số nguyên được thực hiện rất nhanh. Có thể tóm tắt phương pháp như sau: Giả sử cần nhân m với n. Kiểm tra m nếu lẻ thì cộng thêm n vào kq (đầu tiên kq được khởi tạo bằng 0), sau đó lấy m chia 2 và n nhân 2. Quay lại kiểm tra m và thực hiện như trên. Quá trình dừng khi không thể chia đôi m được nữa (m = 0), khi đó kq là kết quả cần tìm (tức kq = m*n).
Nói câu thật lòng, gạch đá xin chịu: Học lại cú pháp cơ bản trước đi bạn
Cho em sai ở đâu ạ,em cảm ơn
Định nghĩa số nguyên trong máy tính là gì :3
int :3 :v :v :V em ko để ý cái này ^^
ở trên nhập m và n
trong for thì m=0 --> không hiểu
m>>= 1
n<<=1
–> 2 cái trên chưa từng thấy. Và thấy nó sai sai.
giống như bạn @nxphuc nói. Em nên coi lại cú pháp ngôn ngữ của mình đang học
Cám ơn anh đã trả lời cau hỏi của em
" Dãy biểu thức 2: m >>= 1 và n <<= 1. 2 biểu thức này có nghĩa m = m >> 1 (tương đương với m = m / 2) và n = n << 1 (tương đương với n = n * 2)". đây là nguyên văn tài liêu mà em đang học
còn m=0 là do em sai r ạ
m >>= 1
tương đươngm = m >> 1
, tương tự vớin <<= 1
.Tất cả đều là toán tử gộp, cũng như
+=, -=, *=, /=, ...