Thuật toán xác định số nhập vào có ở dạng nhị phân (chỉ chứa các chữ số 0 và 1)

Mình mới học c++ mà đang bí ở câu này , mn giúp mình với

Bạn đã thử những cách gì rồi? Kết quả thế nào?

1 Like

bài toán yêu cầu chuyển số từ nhị phân -> thập phân , cách chuyển thì mình biết r nhưng mình muốn mở rộng thêm là yêu cầu phải nhập đúng số ở dạng nhị phân ( 0 1 ) ấy
code của mình đây :

/*
    Chuyển số nhị phân sang số thập phân
    Hệ thập phân: 1234 = 1 * 10^3 + 2 * 10^2 + 3 * 10^1 + 4 * 10^0
    Hệ nhị phân: 101 = 1 * 2^2 + 0 * 2^1 + 1 * 2^0
*/
#include<iostream>
#include<math.h>
using namespace std;

int chuyendoi (long long bin){
 int dec=0;
 int n=0;    
 while(bin>0) {
    dec+=(bin%10)*pow(2,n);
    n=n+1;
    bin=bin/10;
 }
 return dec;
}

int main(){
    int xd;  
    do{ int bin;
        cout << " nhap so" ;
        cin >> bin;
        int stt=bin;
        int demso;
        int arr[demso];
        int i=0;
        while (stt>0){
            demso++;
            arr[i]=stt%10;
            i++;
            stt/=10;
        }
        
        for(int i=0;i<demso;i++){
          if (arr[i]==1 || arr[i]==0){
              xd=1;
          }
          else {
              xd =0;
              break;
          }
      }
    }
    while (xd==0);
     
    cout << " gia tri chuyen doi la "  << chuyendoi(bin);
        
}

Mình hiểu ý tưởng của bạn rồi, nhưng còn chỗ thắc mắc:

int demso;
int arr[demso];
//...
demso++;

demso là bao nhiu?

p/s: DNH có phần preview trước khi reply, trước khi post bạn nghía qua phần preview xem có đúng format như mong muốn chưa rồi hẳn post, reply của bạn nhìn lộn xộn quá.

3 Likes
/*
    Chuyển số nhị phân sang số thập phân
    Hệ thập phân: 1234 = 1 * 10^3 + 2 * 10^2 + 3 * 10^1 + 4 * 10^0
    Hệ nhị phân: 101 = 1 * 2^2 + 0 * 2^1 + 1 * 2^0
*/
#include<iostream>
#include<math.h>
using namespace std;
int chuyendoi (long long bin){
 int dec=0;
 int n=0;    
 while(bin>0) {
    dec+=(bin%10)*pow(2,n);
    n=n+1;
    bin=bin/10;
 }
 return dec;
}
int main(){
    int xd; 
    long long bin; 
    do {cout << " nhap so" ;
        cin >> bin;
        long long stt=bin;
        int demso=0;        
        int i=0;
        long long arr[10000];
        // lấy các chữ số của số đã nhập vào hàm arr , tính số lượng chữ số 
        while (stt>0){
            demso++;
            arr[i]=stt%10;
            i++;
            stt/=10;
        }
        // kiểm tra xem các chữ số của số có =1 hoặc =0 hay ko . Nếu có 1 chữ số khác 0 và 1 thì cho xd=0 , sau đó hủy vòng lặp . 
        for(int i=0;i<=demso;i++){
          if (arr[i]==1 || arr[i]==0){
              xd=1;
          }
          else {
              xd =0;
              break;
          } 
      }
    }
    while (xd==0);
    // nếu xd=1 tức tất cả chữ số đều là 0 hoặc 1 thì chuyển đổi .
    if (xd==1){
    cout << " gia tri chuyen doi la "  << chuyendoi(bin);}   
}

#Update : mình chạy đc = code này rồi , mà nếu nhập giá trị là 4124 thì nó yêu cầu nhập lại , nhập tiếp 101 nó lại yêu cầu nhập lại tiếp :frowning: nãy giờ test đúng mà vừa test lại sai trường hợp này

Xem lại điều kiện chỗ này xem sao

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?