我必須編寫一個C程序,它從二進制字符串中讀取字符串並打印出小數形式。binaryToDecimal無庫函數
我幾乎有它,但我有一個限制,因爲我們不允許使用庫函數 - 只有scanf()
和printf()
,而不是rem
。
我必須編寫一個C程序,它從二進制字符串中讀取字符串並打印出小數形式。binaryToDecimal無庫函數
我幾乎有它,但我有一個限制,因爲我們不允許使用庫函數 - 只有scanf()
和printf()
,而不是rem
。
既然你正在尋找一種算法,這裏的總體思路是:
將數據讀入使用與fgets的字符數組。驗證它只有'0'和'1'字符。然後,從字符串的末尾開始,計算一個總和爲int或long或long long(不知道你需要支持多少位)。要計算總和,請跟蹤您所在的數字。每個數字都是二進制的,您應該知道如何從一個基地轉換爲另一個基地:
從字符串末尾的位置l=0
開始。當在l
的位置有1時,你的總和爲l
增加2。然後,添加一個到l
,並在字符串中備份一個位置。重複,直到你在字符串的前面。通過這種方式,你可以將1的位置,2的位置,4的位置,8的位置等添加到十進制結果中。
#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;
}
請看看[我如何問一個好問題?](http://stackoverflow.com/help/how-to-ask)。 – user1251007 2014-09-04 17:40:20
正是這就是我需要的 – user1032 2014-09-04 17:46:17
發表你的代碼在哪裏「我幾乎擁有它」。 – chux 2014-09-04 19:44:18