void ChuyenDoi(double so, int k){
char chuso[16] = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
FILE *f;
int a;
char mang1[50],mang2[20];
int i = 0,j = 0;
double b;
//lay phan nguyen
a = floor(so);
//lay phan thap phan
b = so - a;
//chuyen doi phan nguyen
while(a > 0)
{
mang1[i] = chuso[a % k];
a = a / k;
i++;
}
//chuyen doi phan thap phan
while(j!=20 )
{
int tam;
b = b * (float)k;
tam = floor(b);
mang2[j] = chuso[tam];
b = b - floor(b);
cout<<b<<"--";
j++;
}
//
//in ket qua ra man hinh
cout<<"Ket Qua Chuyen So "<<so<<" Sang He Co So "<<k<<" La : ";
for(int m = i-1;m>=0;m--)
{
cout<<mang1[m];
}
cout<<".";
for(int m = 0;m<j;m++)
{
cout<<mang2[m];
}
//ghi ket qua vao file
f=fopen("ketqua.txt","wt");
fprintf(f,"%s","Ket Qua Chuyen So ");
fprintf(f,"%f",so);
fprintf(f,"%s"," Sang He Co So ");
fprintf(f,"%d",k);
fprintf(f,"%s"," La : ");
for(int m = i-1;m>=0;m--)
fprintf(f,"%c",mang1[m]);
fprintf(f,"%c",'.');
for(int m = 0;m<j;m++)
fprintf(f,"%c",mang2[m]);
fclose(f);
}
main()
{
double so;
int coso;
do{
cout<<"Nhap vao so can chuyen doi : ";
cin>>so;
}while(so < 0);
do{
cout<<"Nhap vao he co so can chuyen doi(2 - 16) : ";
cin>>coso;
}while(coso < 2 || coso > 16);
ChuyenDoi(so,coso);
getch();
}
Mình không hiểu tại sao đoạn code này b = b - floor(b); khi trừ nó lại cho ra số lẻ phía cuối không mong muốn mình ví dụ 0.4400001( Kết quả tính máy tính casio là 0.44 nhưng chạy trên thuật toán này lại ra là 0.4400001). Bởi vì có số lẻ như vậy đã làm cho thuật toán trên của mình cũng chạy sai. Có cách nào khắc phục vấn đề như trên không các bạn.

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