2014-09-04 40 views
-2

我必須編寫一個C程序,它從二進制字符串中讀取字符串並打印出小數形式。binaryToDecimal無庫函數

我幾乎有它,但我有一個限制,因爲我們不允許使用庫函數 - 只有scanf()printf(),而不是rem

+0

請看看[我如何問一個好問題?](http://stackoverflow.com/help/how-to-ask)。 – user1251007 2014-09-04 17:40:20

+0

正是這就是我需要的 – user1032 2014-09-04 17:46:17

+0

發表你的代碼在哪裏「我幾乎擁有它」。 – chux 2014-09-04 19:44:18

回答

1

既然你正在尋找一種算法,這裏的總體思路是:

將數據讀入使用與fgets的字符數組。驗證它只有'0'和'1'字符。然後,從字符串的末尾開始,計算一個總和爲int或long或long long(不知道你需要支持多少位)。要計算總和,請跟蹤您所在的數字。每個數字都是二進制的,您應該知道如何從一個基地轉換爲另一個基地:

從字符串末尾的位置l=0開始。當在l的位置有1時,你的總和爲l增加2。然後,添加一個到l,並在字符串中備份一個位置。重複,直到你在字符串的前面。通過這種方式,你可以將1的位置,2的位置,4的位置,8的位置等添加到十進制結果中。

0
#include <stdio.h> 
#include <stdint.h> 
#include <inttypes.h> 

int main(){ 
    char bits[32+1]; 
    uint32_t d=0; 
    scanf("%32[01]", bits); 
    for(int i=0;bits[i];++i){ 
     d <<= 1; 
     if(bits[i]=='1') 
      d |= 1; 
    } 
    printf("%" PRIu32 "\n", d); 

    return 0; 
}