DEC2BIN - Đổi hệ thập phân sang nhị phân

Xem dạng PDF

Gửi bài giải

Điểm: 1,00 (OI)
Giới hạn thời gian: 1.0s
Giới hạn bộ nhớ: 256M

Tác giả:
Dạng bài
Ngôn ngữ cho phép
C, C#, C++, Go, Java, Pascal, Perl, PHP, Python, Ruby, Rust, Scratch, Swift

Hệ thập phân (cơ số 10) là hệ cơ số mà con người chúng ta sử dụng hàng ngày trong cuộc sống. Thế nhưng, chiếc máy tính của chúng ta lại chỉ có thể làm việc với hệ nhị phân (cơ số 2).

Ví dụ:

  • ~8_{10} = 1000_{2} = 1*2^3 + 0*2^2 + 0*2^1 + 0*2^0~

Yêu cầu:

Cho một số nguyên dương trong hệ cơ số ~10~, hãy viết số đó trong hệ cơ số ~2~ (hệ nhị phân).

Input

  • Dòng đầu ghi số nguyên dương ~T~ là số bộ test;
  • ~T~ dòng tiếp theo, mỗi dòng chứa một số nguyên dương ~n~ trong hệ thập phân.

Giới hạn:

  • ~1 ≤ T ≤ 10^5, 1 ≤ n ≤ 10^{18}~

Output

  • Với mỗi số nguyên dương ~n~ trong hệ thập phân, in ra trên một dòng xâu nhị phân biểu diễn số đó trong hệ nhị phân (không bắt đầu bởi số ~0~).

Sample

Input #1
3
5
7
10
Output #1
101
111
1010

Problem source: Chuyên Sơn La Online Judge


Bình luận

Hãy đọc nội quy trước khi bình luận.



  • 0
    khaipt00001  đã bình luận lúc 25, Tháng 4, 2024, 14:31 sửa 3

    j

       void bitsp(ll n)
       {
      if(n==0) return;
      else
    {
    bitsp((n-n%2)/2);
    
        cout<&lt;n%2;
    }
       }
       void solve()
        {   
       ll n;cin>>n;bitsp(n);cout<&lt;el;
        }
    

  • 1
    nguyenductoan59  đã bình luận lúc 4, Tháng 4, 2024, 4:43

    C++ FULL AC NHA

    include<bits/stdc++.h>

    using namespace std;

    int main()

    {

    int a[105];
    long long sum, n;
    cin>>sum;
    while(sum--)
    {
        int count=0;
        cin>>n;
        while(n!=0)
        {
            a[count]=n%2;
            n/=2;
            count++;
        }
        for(int i=count-1; i>=0; i--)
        {
            cout<&lt;a[i];
        }
        cout<&lt;endl;
    }
    return 0;
    

    }


    • -3
      chuduchieu88d88s100zz1000z  đã bình luận lúc 5, Tháng 4, 2024, 7:49

      sao bạn lại chép code của mình, học cùng trường mà lấy code mình để làm gì


  • 1
    chuduchieu88d88s100zz1000z  đã bình luận lúc 4, Tháng 4, 2024, 4:41

    code full AC nha

    include<bits/stdc++.h>

    using namespace std;

    int main()

    {

    int a[100];
    
    long long t, n;
    
    cin>>t;
    
    while(t--)
    
    {
    
        int dem=0;
    
        cin>>n;
    
        while(n!=0)
    
        {
    
            a[dem]=n%2;
    
            n/=2;
    
            dem++;
    
        }
    
        for(int i=dem-1; i>=0; i--)
    
        {
    
            cout<&lt;a[i];
    
        }
    
        cout<&lt;endl;
    
    }
    
    return 0;
    

    }


  • -2
    cmhehe176  đã bình luận lúc 6, Tháng 3, 2024, 19:16

    strong textstring nto( long long n){ string result ; while (n){ result = to_string(n%2) + result; n/=2; } return result; }


  • -3
    thangok  đã bình luận lúc 3, Tháng 3, 2024, 12:20

    Tham khảo

    include<bits/stdc++.h>

    using namespace std; int main() { int a[100]; long long t, n; cin>>t; while(t--){ int dem=0; cin>>n; while(n!=0){ a[dem]=n%2; n/=2; dem++; } for(int i=dem-1;i>=0;i--){ cout<<a[i]; } cout<<endl; } return 0; }


  • -3
    stonerduy  đã bình luận lúc 23, Tháng 2, 2024, 13:07

    include<iostream>

    using namespace std; int main() { ! long long n,t;string s; ! cin>>t; ! for (int i=1;i<=t;i++){ ! cin>>n;s=""; ! while (n!=0) ! { ! if (n%2==0) s='0'+s;else s='1'+s; ! n=n/2; ! } ! cout<<s<


  • -3
    haoblung  đã bình luận lúc 16, Tháng 2, 2024, 18:11

    mình dùng scratch test đến trường hợp 9007199254740993/2 = 4.503.599.627.370.496 chứ kết quả không phải 4.503.599.627.370.496,5 sửa làm sao giờ


  • -2
    thambtk17  đã bình luận lúc 15, Tháng 2, 2024, 14:41

    include <bits/stdc++.h>

    using namespace std;

    int main() { long long b[100000],j,s,i,n,a[100000]; cin>>n; for(i=1;i<=n;i++) { cin>>b[i]; } for(i=1;i<=n;i++) { s=b[i]; int z=0; while(s>0) { z++; a[z]=s%2; s=s/2; } for(j=z;j>0;j--) cout<<a[j]; cout<<endl; } return 0; }


  • -3
    ZeroNNT17  đã bình luận lúc 4, Tháng 2, 2024, 12:09

    include <stdio.h>

    void dec2bin(long long n) {

    int i=0, a[200];
    
    while (n!=1) {
        a[i] = n%2;
        n = n/2;
        i++;
    }
    a[i] = 1;
    for (int j=i; j>=0; j--)
        printf("%d",a[j]);
    printf("\n");
    

    }

    int main() {

    long long t,a[100000];
    
    scanf("%lld",&t);
    
    for (int i=1; i<=t; i++)
        scanf("%lld",&a[i-1]);
    
    for (int i=0; i&lt;t; i++)
        dec2bin(a[i]);  
    return 0;
    

    } Full test


  • -1
    VoPhatDat  đã bình luận lúc 21, Tháng 12, 2023, 14:07

    def coso2(n): s = "" while(n !=0): i = n % 2 s = s+str(i) n//=2
    return s[::-1] n = int(input()) l = [] for i in range(n): inp = int(input()) l.append(inp) for i in l: print(coso2(i))


  • -2
    XaThanAnhTrang  đã bình luận lúc 9, Tháng 12, 2023, 2:33

    Long long có chứa dc 10 mũ 18 ko mn


    • -2
      datleyt29102005  đã bình luận lúc 14, Tháng 12, 2023, 1:23

      đc bạn ơi


  • -1
    tungkq123  đã bình luận lúc 28, Tháng 11, 2023, 13:58

    ai bt test10 là j ko vậy


  • 3
    duongnguyen0210  đã bình luận lúc 12, Tháng 11, 2023, 9:46 chỉnh sửa

    dưới đây là solve của mình khá đơn giản thôi:))

    #include <iostream>
    
    using namespace std;
    
    string solve(long long int n)
    {   
        string s = "";
        while (n != 0)
        {
            if (n % 2 == 0)
                s = '0' + s;
            else
                s = '1' + s;
            n /= 2;
        }
        return s;
    }
    
    int main()
    {
        ios_base::sync_with_stdio(false);
        cin.tie(nullptr);
        int t;
        cin >> t;
        while (t--)
        {
            long long int n;
            cin >> n;
            cout << solve(n) << endl;
        }
     }
    

    các bạn cứ suy nghĩ đơn giản đó là nếu n chia 2 dư 1 thì cộng số 1 vào xâu s theo kiểu cộng số vào đầu của xâu s còn nếu n chia 2 dư 0 thì cộng 0 và đầu xâu s và kết quả chính là xâu s(các bạn có thể lên mạng tìm hiểu cách đổi hệ thập phân sang hệ nhị phân mình có để link ở đây cho bạn nào muốn tham khảo: https://www.wikihow.vn/%C4%90%E1%BB%95i-t%E1%BB%AB-S%E1%BB%91-Th%E1%BA%ADp-ph%C3%A2n-sang-Nh%E1%BB%8B-ph%C3%A2n cách mình làm là cách đầu tiền trong link trên.


    • -1
      ntm_mtn  đã bình luận lúc 21, Tháng 1, 2024, 7:33

      mình ko cần phải đảo lại à bạn? bạn giải thích giúp mình với


      • -1
        hieugiangho2015  đã bình luận lúc 10, Tháng 2, 2024, 14:35

        lúc cộng xâu, bạn ấy s = '0' + s vd: xâu hiện tại là 10 thì s='0'+s là 010, nó khác với s = s+'0'


    • -1
      tungkq123  đã bình luận lúc 28, Tháng 11, 2023, 14:04

      minh cũng có 1 cách khác tg tự b #include<iostream>

      include<string.h>

      using namespace std;

      void chuyendoihethapphan(long long int n) { long long x[1000005]; int dem=0; while(n!=0) { x[dem]=n%2; ++dem; n/=2; }

      for(int i=dem-1;i>=0;i--)
      cout<&lt;x[i];
      

      }

      int main() { long long int T,x[100005];

      cin>>T;
      for(int i=0;i&lt;T;i++)
      {
          cin>>x[i];
      }
      

      for(int i=0;i<T;i++) { chuyendoihethapphan(x[i]); cout<<"\n"; } }


  • -1
    5kym4rk  đã bình luận lúc 31, Tháng 10, 2023, 10:26

    Đây là bài thi kết thúc thực hành IT1110 Bách Khoa Hà Nội. Và phòng thi của mình(lớp Điện tử viễn thông) chỉ có 1 bạn AC.


    • -1
      nguien_24  đã bình luận lúc 6, Tháng 11, 2023, 17:21

      mình k68 bk nè


      • -1
        5kym4rk  đã bình luận lúc 14, Tháng 11, 2023, 2:42

        hôm đi thi 30' mình viết 1 vòng while vét được 6/10 test.


      • -1
        5kym4rk  đã bình luận lúc 14, Tháng 11, 2023, 2:35

        ac bài này là 10 điểm thực hành đấy em. bộ test của các thầy cô chắc cũng chỉ như thế này thôi.


  • -10
    _SUGAR__DADDY_  đã bình luận lúc 28, Tháng 10, 2023, 2:24

    Bình luận này đã bị ẩn vì có quá nhiều phản ứng tiêu cực. Nhấn để xem.


  • -4
    hung2k5hht  đã bình luận lúc 15, Tháng 9, 2023, 14:16

    test 2 là sao ạ


  • -1
    Hailun  đã bình luận lúc 7, Tháng 9, 2023, 10:15

    cho em hỏi test case 2 là gì vậy ạ


    • -1
      codega  đã bình luận lúc 15, Tháng 10, 2023, 6:45

      bạn xem lại code đã đúng với điều kiện đề bài các số có thể lên đến 10^18 chưa nhé.


  • -1
    nmtSPer  đã bình luận lúc 22, Tháng 8, 2023, 9:46

    Mọi người làm ơn xem giúp em tại sao task 3 em lại sai với ạ kết quả ra khác giá trị cuối cùng 1 ạ

    #include<stdio.h>
    #include<math.h>
    int main(){
        int T,i;
        scanf("%d",&T);
        for(i=0;i&lt;T;i++){
            int j=0;
            long long n;
            scanf("%lld",&n);
            while(pow(2,j)<=n){
                j++;
            }
            j--;
            while(j>=0){
                if(n>=pow(2,j)){
                    printf("1");
                    n-=pow(2,j);
                }
                else{
                    printf("0");
                }
                j--;
            }
            printf("\n");
        }
        return 0;
    }
    

    • -1
      ShinrinOharu  đã bình luận lúc 20, Tháng 9, 2023, 8:21

      Đoạn mã C++ của bạn không có lỗi cú pháp, nhưng có thể gặp vấn đề về hiệu suất khi giá trị của n rất lớn do việc sử dụng hàm pow(2, j) nhiều lần trong vòng lặp. Một cách tốt hơn để giải quyết vấn đề này là sử dụng phép dịch bit thay vì hàm pow như sau:

      include<stdio.h>

      int main(){ int T; scanf("%d",&T); while(T--){ long long n; scanf("%lld",&n); int bit[64] = {0}; int j = 0; while(n > 0){ bit[j++] = n % 2; n /= 2; } for(int i = j - 1; i >= 0; i--){ printf("%d", bit[i]); } printf("\n"); } return 0; }