30/09/2018, 16:24

Bài tập về đổi từ thập phân sang nhị phân

Mình làm ntn nhưng số nó bị ngược ko biết cách nào đảo lại cho xuôi. và nếu muốn lấy số nhị phân này gán vào 1 biến thì làm ntn???

#include <stdio.h>
#include <stdlib.h>

int main()
{
   int thap_phan;
   int h[]= {0,1};
   printf("nhap so he thap phan can doi:");
   scanf("%d",&thap_phan);
   while (thap_phan/2)
   {
    if(thap_phan%2)
    {
        printf("%d",h[1]);
    }
    else
        {
            printf("%d",h[0]);
        }
        thap_phan /= 2;

   }
   printf("%d",thap_phan);
    return 0;
}
Nguyễn Hoàng Sơn viết 18:41 ngày 30/09/2018

Mới học mà hì. tại mình có làm cái bài chuyển sang hệ 16 bài đó cũng dùng mảng cho i chạy từ 0=>15 đẻ in ra từng phần tử trong mảng nhưng ko thành đành chuyển sang đổi hệ nhị phân cho đơn giản hơn xong nhị phân mới làm lại thập lục mà xem trên wiki nó cũng dùng mảng mà ko hiểu lắm nó viết = c++. bạn dịch qua c cho mình với đc ko?

const alpha = "0123456789ABCDEF";
 
void printinbase(long d, short b) { // in ra số ở hệ cơ số b tương ứng với số thập phân d)
  short r=d%b;
  if (d-r) printinbase(d/b,b);
  cout << alpha[r];
}
Nguyễn Hoàng Sơn viết 18:28 ngày 30/09/2018

mấy cái bác nói em cũng nắm sơ sơ khi xem video của anh đạt rồi.cơ mà quay lại vấn đề chính ở đầu em hỏi ý sô bị ngược in sao cho xuôi và làm sao để lấy số đó gán cho 1 biến.

Lê Đình Huy viết 18:34 ngày 30/09/2018

Mục đích của việc để int h[]={0.1}
với

printf ("%d",h[1]);
printf ("%d",h[0]);

để làm gì vậy cậu ?

Nguyễn Hoàng Sơn viết 18:27 ngày 30/09/2018

Mục đích của việc để int h[]={0.1}với printf ("%d",h[1]);printf ("%d",h[0]);

để làm gì vậy cậu ?

cái đó để là : printf (“1”) và printf (“0”);
cũng đc ^^ tại bệnh làm phức tạp hóa vấn đề ấy mà ^^

Lê Đình Huy viết 18:33 ngày 30/09/2018

Bài tập này có nhiều cách giải lắm và nhìn cách a viết thì e k hiểu , Trong quyển C_aptech chỉ mới dạy hàm scan và printf đã có 1 bài tập về chuyển đổi một số nguyên hệ 10 sang hệ 2 ( thập phân sang nhị phân ) k biết có cách nào làm bài đó mà chỉ dùng 2 hàm đó không ? .
Còn bài của bạn ở trên sao in ra lại bị ngược số nhỉ :
10 = 1010
Nhưng trương trình lại tính ra là 0101 …

Nguyễn Hoàng Sơn viết 18:37 ngày 30/09/2018

Bài tập này có nhiều cách giải lắm và nhìn cách a viết thì e k hiểu , Trong quyển C_aptech chỉ mới dạy hàm scan và printf đã có 1 bài tập về chuyển đổi một số nguyên hệ 10 sang hệ 2 ( thập phân sang nhị phân ) k biết có cách nào làm bài đó mà chỉ dùng 2 hàm đó không ? .Còn bài của bạn ở trên sao in ra lại bị ngược số nhỉ : 10 = 1010 Nhưng trương trình lại tính ra là 0101 …

----Đó bài này mình đang mắc ở vấn đề bị ngược nay mà thím BreakDown trả lời gì đâu ấy . mình vừa mới nghĩ ra cách giải quyết đảo lại là gán nó vào 1 xâu rồi ta đảo xâu :v…

----mình cũng đọc cái C_aptech của anh Đạt có 2 lệnh scantf vs printf ta dùng %x thì đc thập lục. còn quả nhị phân thì chịu

Lê Đình Huy viết 18:29 ngày 30/09/2018

A chỉ cách gán vào 1 biến hả ^^, sr e gà nên nhìn k ra

nhatlonggunz viết 18:27 ngày 30/09/2018

Có phải bạn cần cái này?

int main()
{
	int n, A[1000], i, j = 0;

	scanf("%d", &n)

	while (n != 0){
		A[j] = n % 2;
		n /= 2;
		j++;
	}
	for (int k = j - 1; k >= 0; k--){
		printf("%d", A[k]);
	}
}
Lê Đình Huy viết 18:36 ngày 30/09/2018

haha, e gà quá nên nhìn k ra, cứ tập trung ở chỗ sao nó ra ngược mà k đọc hết

Nguyễn Hoàng Sơn viết 18:34 ngày 30/09/2018

—Vẫn chữa “Ngộ” đc ý của thím breakdown muốn nói gì.@@
— thứ nhất là mình muốn sau khi in đc ra số nhị phân ta gán số đó cho 1 biến như thế nào và có đc ko?
—thứ 2 mình có ghi rõ là tìm ra cách để ĐẢO NGƯỢC lại.
— thứ 3 là em thấy bác nói không sát vấn đề em hỏi cho lắm mà em thấy mấy cái bác bác nói lan man em có cảm giác như bác đang khẳng định mình biết rộng biết nhiều hơn là cố gắng cho em hiểu.
-có lẽ do em ngu dốt nên không hiểu đc ý nghĩ sâu xa của những lời bác nói nên em suy nghĩ vậy có gì không phải mong bác bỏ qua.

Tới đây hiểu nhau hơn rồi nhé:
những chỗ em chưa hiểu trong lời giải thích của bác là:

Nếu dùng mảng để lưu giá trị n % 2 thì sau này xuất ngược mảng nữa là đc.

–Chỗ này bác cho xin 1 ví dụ nho nhỏ về “suất ngược mảng nữa đc” với em chưa hình dung ra đc mảng nữa là mảng gì như thế nào.

Ví dụ thế này cho dễ hiểu nhé. giờ xét một số nào đó có số binary là

1 0 0 0 1 1 1

Vậy mảng chứa số đó là

1 1 1 0 0 0 1

0 1 2 3 4 5 6 // số i

vậy có phải là số đó = 10^0+10^1+10^2+10^6 (do những số 0 không tính).

Chỉ đơn giản vậy là có thể tính đc rồi giờ xem Đã thấy được sự liên hệ chưa?

– Chỗ này thì bác giải thích cho em tại sao mảng chứa nó lại là như vậy có phải đây là cái mảng khi em in ra bị ngược đây ko?? tại sao
10^0+10^1+10^2+0^3+0^4+0^5+10^6 =đúng số nhị phân đó

**

-Em mới bắt đầu học mong các anh chị đàn anh đi trc chỉ giáo, với em cũng ngu dốt nữa nên anh anh chị nói mấy cái sơ cấp thôi ạ. em cảm ơn bác nhiều

Nguyễn Hoàng Sơn viết 18:35 ngày 30/09/2018

cái đoạn thuật toán kia em hiểu rồi nhưng tại sao khi đảo ngược lại só nhị phân và lây 10^i+ vào lạ ra đúng số đó.
cái gán %2 cũng hiểu là chỉ có 0 và 1 nhương số nào sẽ là vị trí 0 cái nào là vị trí 1 trong mảng. huh

Nguyễn Hoàng Sơn viết 18:37 ngày 30/09/2018

ok. còn cái ý trên anh??

Nguyễn Hoàng Sơn viết 18:41 ngày 30/09/2018

@@ tự nghĩ ra. thế là nó sẽ đúng với tất cả các số nhị phân @@. impossible

Nguyễn Hoàng Sơn viết 18:28 ngày 30/09/2018

Rồi cảm ơn bác nhiều…

Minh Hoàng viết 18:31 ngày 30/09/2018

dùng thuật toán đệ quy cũng gọn lắm

>      void dec2bin(int x)
>         {
>              if (x!=0)
>              {
>              dec2bin(x/2);
>              printf("%i",x%2);
>              }
>              else
>              printf("0");
>         }
nhatlonggunz viết 18:31 ngày 30/09/2018

cho em thắc mắc, nó gọi lại dec2bin, vậy cái này có được gọi là đệ quy không nhỉ
Mà kết quả phải đảo ngược dãy số lại mà anh

Minh Hoàng viết 18:34 ngày 30/09/2018

à để giải thích lại cái chỗ else tí
cái hàm trên mình viết vội quá nên nó hơi kì cục chỗ else, cơ bản là do nếu không có em ý thì không được( giả sử như x=0)
để viết lại một cái chỉnh chu đỡ kì hơn xí

Nguyễn Hoàng Sơn viết 18:41 ngày 30/09/2018

Cmt này hay nè thím breakDown. ^^ cảm ơn thím lần nữa :v

trần đại hiệp viết 18:26 ngày 30/09/2018

#include

void ConvertToBinary(int n) /Alex says: Good to use unsigned int if u can/
{
if (n / 2 != 0) {
ConvertToBinary(n / 2);
}
printf("%d", n % 2);
}

using namespace std;
int main()
{
int n = 3;
ConvertToBinary(n);
return 0;
}

Mai Hoài Thương viết 18:30 ngày 30/09/2018

Nhưng mà nó chỉ tính được một lần, mỗi lần muốn đổi mình phải mở lại hả, có cách nào cho nó tính liên tục được không.

Bài liên quan
0