2014-01-20 95 views
1

我是C新手,我試圖將十進制轉換爲二進制。 結果是給我一個需要什麼的倒數。 我試圖對結果應用模數,就像我在其他論壇上看到的一樣,但我仍然得到相同的結果。 有什麼幫助嗎?扭轉結果

#include<stdio.h> 

int main() 
{ 
int number; 
long int quotient, rem; 
printf("Enter a number: "); 
scanf("%d", &number); 

quotient=number; 

while (quotient!=0) 
{ 
    quotient=quotient/2; 
    rem=quotient%2; 
    printf("%ld", rem%10); 
    rem/=10; 
} 
} 

我接受了一個基於打印功能的建議,但仍然不確定是否理解它仍然給我相同的結果。請看一看。

#include<stdio.h> 

void Print(int number,int base) 
{ 
if (number >= base) 
    Print(number/base,base); 
printf("%d",number%base); 
} 

int main() 
{ 
int number; 
long int quotient, rem; 
printf("Enter a number: "); 
scanf("%d", &number); 

quotient=number; 

while (quotient!=0) 
{ 
    quotient=quotient/2; 
    rem = quotient%2; 
    Print(rem, 2); 
    } 
} 

只是一個小紙條,因爲我忘了說,我不希望你經歷麻煩。 想法os不使用數組。 謝謝

+1

請參閱http://stackoverflow.com/a/112956/1274314 – TypeIA

+0

首先,我知道如何反轉給定的數字,我可以檢查互聯網如何將小數轉換爲二進制但我沒有它由我自己,但我只是被卡住的結果我越來越 – user2985083

+0

哦,我不能使用陣列 – user2985083

回答

0

你應該以各種方式解決問題。過程1:只做右移,檢查移位結果並打印決定輸出。

int main() 
{ 
    int n, c, k; 

    printf("Enter an integer in decimal number system\n"); 
    scanf("%d", &n); 

    printf("%d in binary number system is:\n", n); 

    for (c = 31; c >= 0; c--) 
    { 
    k = n >> c; 

    if (k & 1) 
     printf("1"); 
    else 
     printf("0"); 
    } 

    printf("\n"); 

    return 0; 
} 
+0

好偷。 :)當你提供這樣的答案時,你應該留下引用,我知道是誰寫了這段代碼。 – Secko

0

試試看看這個代碼。

int number; 
printf("Enter a number: "); 
scanf("%d", &number); 
printf("%d",decimal_binary(number)); 


int decimal_binary(int n) /* Function to convert decimal to binary.*/ 
{ 
int rem, i=1, binary=0; 
while (n!=0) 
{ 
    rem=n%2; 
    n/=2; 
    binary+=rem*i; 
    i*=10; 
} 
return binary; 
} 
+0

這太奇怪了。它將數字(已經是「二進制」)轉換成某種「十進制打包二進制」形式,例如,輸入47被轉換成十進制數字11111,因爲那也恰好是數字的二進制表示。所以很混亂。 – unwind

+0

然後嘗試另一個代碼,發佈如下... :) –

3

你可以做到這一點的 「後進先出」 的方式:

void Print(int number,int base) 
{ 
    if (number >= base) 
     Print(number/base,base); 
    printf("%d",number%base); 
} 

然後,main,你可以用2和10

+0

嘿,我仍然有問題。它仍然沒有正確打印 – user2985083

+0

適合我。您可能需要在每次調用「Print(...)'後添加'printf(」\ n「)''。 –

+0

你能否請我驗證一下我在帖子上編輯過的內容? – user2985083

0

之間的任何基地叫它我試圖將十進制轉換爲二進制

您沒有任何小數點後面的點已經掃描了輸入。你有一個號碼。數字不是十進制或二進制,它們只是數字。 scanf已將某個數字的十進制表示轉換爲您的數字。

一旦你有你想要獲得它的二進制representstion一個數字。再一次,你手頭沒有數字。

現在問問你自己,在10英里的分區你發現在互聯網的某個黑暗角落可能是正確的。

(此答案有意留下未完成)

0

long int decimalNumber,remaining,quotient;

int binaryNumber[100],i=1,j; 


printf("Enter any decimal number: "); 

scanf("%ld",&decimalNumber); 


quotient = decimalNumber; 


while(quotient!=0){ 

    binaryNumber[i++]= quotient % 2; 

    quotient = quotient/2; 

} 


printf("Equivalent binary value of decimal number %d: ",decimalNumber); 

for(j = i -1 ;j> 0;j--) 

    printf("%d",binaryNumber[j]); 
0

在這裏你從你自己的代碼去我能夠糾正誤導,並提供二進制數的正確顯示。

#include<stdio.h> 

int main() 
{ 
    long int decimal, quotient; 
    int binarynumber[1024]; 
    const int base = 2; 

    printf("Enter a number: "); 
    scanf("%ld", &decimal); 
    printf("%d in binary: ", decimal); 

    quotient = decimal; 

    int i=1; 
    while (quotient!=0) 
    { 
     binarynumber[i++]=quotient%base; 
     quotient/=base; 
    } 
    for(int j=i; j>0; --j){ 
     printf("%d",binarynumber[j]); 
    } 
    printf("\n"); 
    return 0; 
} 

你是正確的有一個十進制數變,我把它叫做decimal以避免混淆。但是,您可以將quotient中的十進制數字輸入存儲起來,它的工作原理也是一樣的。

我添加了基地號變量base,在我看來,這應該是一個常數,而不是代碼中的模運算符加基數,即%2

你應該有一個變量,你在這個代碼中有rem,binarynumber - 將它全部存儲起來,然後像在代碼中提供的for循環中那樣在這個變量中取反。我最好將它存儲在一個數組中,而不是使用名爲rem的其他變量創建混淆。

我不知道你想用rem/=10;做什麼,所以我就這麼做了。

您正確使用long int作爲商,但在很多情況下,long intint相同。

在許多(但不是全部)C和C++實現中,長整數大於 int。大多數編譯器使用一個長32位的int,它具有相同的大小和表示形式 。 Reference

一件事,你所使用的基地劃分和檢索模答案,這就造成了一個不正確的模量,一個不正確的餘數是(在你的代碼之前存入商(在你的代碼quotient=quotient/2;rem=quotient%2;)。它檢索了下一個號碼的提醒。

希望這是明確的。

+0

您好,首先非常感謝您的幫助。這裏的挑戰並不是用數組來完成。我試圖找出一種不使用數組的方法。儘管我知道如何去做。但是,謝謝你的回答。 – user2985083

+0

@ user2985083你沒有在你的問題中說明。一旦我想出解決方案,我會嘗試更新。 – Secko