Mình viết chương trình chuyển đổi giữa hệ nhị phân sang thập phân và ngược lại không sử dụng array với string. ( Mình kết hợp 2 bài toán trong 1 file và có menu chọn ) . Ở phần DectoBin khi mình test những số nhỏ nhỏ kết quả vẫn đúng, nhưng khi test mấy số như 12, 16 trở lên kết quả ra sai. VD 16 ra 9999 thay vì 10000. Mọi người giải thích cho mình với ạ!
Đây là code của mình:
#include<stdbool.h>
#include<stdlib.h>
#include<math.h>
void DectoBin();
void BintoDec();
bool isBin(int n);
void Menu(){
printf("\n===CHUYEN DOI GIUA THAP PHAN VA NHI PHAN===\n");
printf("\t1, Thap phan ==> Nhi phan.\n");
printf("\t2, Nhi phan ==> Thap phan.\n");
printf("\t3, Exit.\n");
int select;
scanf("%d",&select);
switch (select)
{
case 1:
DectoBin();
break;
case 2:
BintoDec();
break;
default:
printf("\nExitting program......\n");
printf("\nThank you ^^! - Nhat dep trai <3 \n");
getch();
exit(0);
}
}
void DectoBin(){
printf("\n==CHUYEN TU THAP PHAN SANG NHI PHAN==\n");
int n;
printf("Nhap so can chuyen doi: ");
scanf("%d",&n);
if (n<0) n = -n;
int i = 0; long long ans = 0;
while (n){
ans += (n%2) * pow(10,i);
++i;
n /= 2;
}
printf("So sau khi chuyen doi la: %lli\n",ans);
Menu();
}
void BintoDec(){
long long n;
printf("\n==CHUYEN TU NHI PHAN SANG THAP PHAN==\n");
do{
printf("Nhap so can chuyen: ");
scanf("%lli",&n);
if (isBin(n) == false)
printf("%lli khong phai so nhi phan!\n",n);
} while (isBin(n) == false);
int ans = 0, i = 0;
while (n){
ans += (n%10)*pow(2,i);
n /= 10;
++i;
}
printf("So sau khi chuyen doi la: %d\n",ans);
Menu();
}
bool isBin(int n){
while (n){
if ((n%10)!=1&&(n%10)!=0)
return false;
n /= 10;
}
return true;
}
int main(){
Menu();
}
Cảm ơn mọi người nhiều ạ!