Em muốn tạo một chương trình chuyển số thập phân sang nhị phân nên vì vậy em tạo mảng động để linh hoạt trong việc đổi bit và chuẩn hóa cho 2 mảng bằng nhau nhưng em lại gặp vấn đề ngay hàm chuẩn hóa khi nhập -9 , -56 thì nó lại bị lỗi em ko biết phải làm sao nữa mong các cao nhân chỉ bảo
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
//====================== Nguyen Ham ==========
void chuyenTP_NP(int a[], int x, int n);
void in_Mang(int a[], int n);
void taoMangRong(int a[], int n);
void kt_Bit(int &n, int x); //dùng để xđ số bit cần dùng cho mảng
void chuanHoaMang(int a[], int b[], int &n, int &m, int x);
void themMotKiTu(int a[], int n, int vitri, int x);
//============================================
//============ HAM MAIN ===============
void main()
{
int *A, *B, *C;
int n, m, len;
int a, b;
printf("Nhap vao hai so a va b :");
scanf_s("%d%d" ,&a,&b);
kt_Bit(n ,a);
A = (int *)malloc(n * sizeof(int));
kt_Bit(m, b);
B = (int *)malloc(m * sizeof(int));
chuyenTP_NP(A, a, n);
chuyenTP_NP(B, b, m);
chuanHoaMang(A, B, n, m, 0);
printf("\nNhi phan a : ");
in_Mang(A, n);
printf("\nNhi phan b : ");
in_Mang(B, m);
/*int tong = a + b;
kt_Bit(len, tong);
C = (int *)malloc(len * sizeof(int));
cong_NP(A, B, C, n, len);
printf("\n\nTong 2 so nhi phan: ");
in_Mang(C, len);*/
free(A);
free(B);
/*free(C);*/
_getch();
}
//=====================================
void taoMangRong(int a[], int n)
{
int i;
for (i = 0; i < n; i++)
{
a[i] = 0;
}
}
void themMotKiTu(int a[], int n, int vitri, int x)
{
a = (int *)realloc(a, (n + 1) * sizeof(int));
a[vitri] = x;
}
void chuanHoaMang(int a[], int b[], int &n, int &m, int x)
{
if (n > m)
{
if (b[m - 1] == 1)
{
x = 1;
}
for (int i = m; i < n; i++)
{
themMotKiTu(b, m, i, x);
m++;
}
}
else
{
if (a[n - 1] == 1)
{
x = 1;
}
for (int i = n; i < m; i++)
{
themMotKiTu(a, n, i, x);
n++;
}
}
}
void kt_Bit(int &n, int x)
{
int i = 4;
int j = 2;
while (true)
{
int p1 = -pow((double)j, i - 1);
int p2 = pow((double)j, i - 1) - 1;
if (x >= p1 && x <= p2)
{
n = i;
return;
}
i++;
}
}
void chuyen_SoAm(int a[], int n)
{
int nho = 0;
for (int i = 0; i < n; i++)
{
if (a[i] == 1)
{
a[i] = 0;
}
else if (a[i] == 0)
{
a[i] = 1;
}
}
int x = a[0] + 1;
nho = x / 2;
x %= 2;
a[0] = x;
if (nho != 0)
{
for (int i = 1; i < n; i++)
{
int x = a[i] + nho;
nho = x / 2;
x %= 2;
a[i] = x;
}
}
}
void chuyenTP_NP(int a[] , int x, int n)
{
int tmp = x;
if (x < 0)
{
x *= -1;
}
int i = 0;
taoMangRong(a,n);
while (x != 0)
{
a[i] = x % 2;
x /= 2;
i++;
}
if (tmp < 0)
{
chuyen_SoAm(a, n);
}
}