Xin chào. Mình có làm 1 đoạn code nhỏ để cho người dùng nhập vào một số thập phân và chuyển nó sang số nhị phân.
Nhưng có 1 điều vô lý là chương trình mình có giới hạn hay sao ấy? Nó chỉ cho kết quả đúng khi số nhập vào phải từ 0 => 1023. Còn khi nhập 1024 thì nó cho kết quả sai
Dưới đây là code:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <math.h>
#include <Windows.h>
void DecimalBinary(int n);
void BinaryDecimal(int m);
int power(int coso, int somu);
int power(int coso, int somu)
{
int ketqua = 1;
for (int i = 1; i <= somu; i++)
ketqua*=coso;
return ketqua;
}
void DecimalBinary(int n)
{
if (n == 0)
printf("Ketqua: 0\n");
else
{
int bienphu = 0;
int a[50];
int i = 0;
while (n != 0)
{
int digit = n%2;
n/=2;
a[i++] = digit;
bienphu++;
}
printf("Ket qua: ");
for (int x = bienphu-1; x >= 0; x--)
printf("%d",a[x]);
printf("\n");
}
}
void BinaryDecimal(int m)
{
int tong = 0;
int chuso = log10(m)+1;
if (m == 0)
printf("Ketqua: 0\n");
else
{
for (int i = 0; i < chuso; i++)
{
int sochu = m%10;
m/=10;
tong+=sochu*power(2,i);
}
printf("Ketqua: %d\n",tong);
}
}
int main()
{
int n;
printf("Nhap so can doi sang he nhi phan: ");
scanf("%d",&n);
DecimalBinary(n);
int m;
printf("\nNhap so can doi sang he thap phan: ");
scanf("%d",&m);
BinaryDecimal(m);
getch();
return 0;
}
Để dễ kiểm chứng thì mình làm thêm cái hàm đổi ngược lại số nhị phân sang số thập phân. Để khi nhập 1 số thập phân rồi sau đó nhập số nhị phân để kiểm tra lại nhưng từ số 1024 trở đi thì bị lỗi.
Ai giúp mình nhé! Xin cảm ơn!