2016-03-21 20 views
-1

Bu kodu herhangi bir diziyi kullanmadan yazmayı denerim, ancak sadece döngüleri kullanarak yazdım, yazdım, iyi çalışıyor ama sorun yok ve bu konuda bir çözüm bulamadım. o: Ben 43 tipi doğru dönüştürür eğer: problem ExMP için sıfır yazmaz olduğunu ben 12 yazdığınızda 101.011 ancak yalnızca 11 yerine 1100Ondalık İkili dönüşüm için C

int decimal,binr=0; 
int bin=0,rem,i; 
printf("enter the decimal number:"); 
scanf("%d",&decimal); 
for(i=1;decimal!=0;i++){ 

    rem=decimal%2; 
    binr= binr*10 +rem; 
    decimal=decimal/2; 


} 
for(i=0;binr!=0;i++){ 

    rem = binr%10; 
    bin= bin*10 +rem ; 
    binr=binr/10; 

} 
printf("the binary equivalent is: %d",bin); 
+1

programınızı izlemek için bir hata ayıklayıcı kullandınız mı? –

cevap

0

Kodunuz, pil biriktiriciniz 0 olduğunda çıktığınız için hatalı çalışıyor. Bunun yerine, bitleri sayıyorsunuz, bu sıfırlar göz ardı edilmeyecek. Ve girdiyi bir değişkene okuduktan sonra, artık ondalık olarak temsil edilmediğini unutmayın, böylece sayı tersine döndükçe bitleri saymak için doğrudan ikiliye gidebilirsiniz.

#include <stdio.h> 

int main (void) { 
    unsigned decimal = 12; 
    unsigned reverse = 0; 
    unsigned bits = 0; 
    while(decimal != 0) { 
     reverse = reverse * 2 + decimal % 2; 
     decimal /= 2; 
     bits++; 
    } 
    if(bits == 0) {       // special case 
     printf("0"); 
    } 
    while(bits != 0) { 
     printf("%u", reverse % 2); 
     reverse /= 2; 
     bits--; 
    } 
    printf("\n"); 
    return 0; 
} 

Program çıkışı:

1100 
+0

Teşekkürler bu çok yardımcı oldu :)) –

+1

'do {reverse = reverse * 2 + decimal% 2; ondalık/= 2; bit ++; } (decimal); 've sonra özel durumu bırakın. – chux

+0

@chux Aslında, sadece sonradan bir istisna olarak istisnayı fark ettim, ( –

0

denediğinizi Eğer gösterir Kodunuzu ayıklamak için çok net göreceksiniz. Eğer b2 programa b10 içinde 12 çalıştırırsanız, bunu yapmak olacaktır:

result=0, value=12 
    ret = 12 % 2 -> 0 
    -> result = result * 10 + ret -> 0*10 + 0 
result=0, value=6 
    ret = 6 % 2 -> 0 
    -> result = result * 10 + ret -> 0*10 + 0 
result=0, value=3 
... 

Sen program için ne gerekiyor yapmıyor görebilirsiniz.

Ayrıca, burada döngüler için kullanmayın. Açıkça bir süre döngüdür (hiç bir zaman i değişkenini bile kullanmadınız, neden artış olur?).

Bazı araştırmalar yaparsanız, ondalık/ikili algoritma uygulamasının birçok uygulamasını görürsünüz.

+0

i değişkeni, yalnızca ondalık 0'a eşit olana kadar devam etmeyi sürdürmek içindir, çok fazla araştırma yaptım ve bu dönüşümü yapmanın birkaç yolunu biliyorum, ancak ihtiyacım olan şey bu döngü kodunun sadece döngüleri kullanmasıdır. Benim tek sorun daha önce de söylediğim gibi Program sıfırları göstermiyor –