[問題] binary to decimal

看板C_and_CPP (C/C++)作者時間15年前 (2010/09/22 21:41), 編輯推噓2(204)
留言6則, 4人參與, 最新討論串1/1
( *[1m *[m 為色碼,可以按 Ctrl+V 預覽會顯示的顏色 ) ( 未必需要依照此格式,文章條理清楚即可 ) 遇到的問題: (題意請描述清楚) 程式能跑...但是結果一直都一樣。 希望得到的正確結果: 就如同標題,user輸入的binary number 能變成 decimal number。 程式跑出來的錯誤結果: 開發平台: (例: VC++ or gcc/g++ or Dev-C++, Windows or Linux) dec-c++ 有問題的code: (請善用置底文標色功能) #include <stdio.h> #include <stdlib.h> #include <math.h> int main(void) { (有些用double是因為我下面計算有用到指數的函數) double b_number; /* the binary number which user typed in */ double digits; /* to know how many dights the binary number is */ double d_number; /* the transformation result */ double divisor; (幫助我寫的轉換過程程式碼運算的變數) int loop_v; /* loop variable */ d_number = 0;/* initialize d_number */ divisor = 1; /* initialize divisor */ loop_v = 1; /* initialize loop variable */ /* processing phase */ printf( "Please Enter a binary number:\n" ); scanf( "%f", &b_number ); printf( "How many digits does the number have?\n" ); scanf( "%f", &digits ); while ( loop_v < digits ) { (這一個迴圈是用來計算要先用多少來除) divisor = divisor * 10; printf( "%f", divisor); loop_v = loop_v + 1; } (比如說我如果輸入111,3 digits,那loop完divisor應該是100) digits = digits - 1; (扣掉1位讓等等轉換不會發生錯誤,因為二進位第一個數是2的零次方) (計算二進位到十進位轉換過程的主要loop) while ( digits >= 0) { d_number = d_number + (b_number / divisor) * pow(2,digits); b_number = b_number - divisor; divisor = divisor / 10; digits = digits - 1; } printf( "The equivalence in decimal number would be:\n%.0f\n", d_number ); system ("pause"); return 0; } 補充說明: 括號"( )"內是我程式碼貼到板上後, 除了原本"/* */"外,多打的補充, 想說怕我寫的程式碼會讓人很難知道想表達什麼...Orz 執行過程是沒有錯誤, 但不曉得為什麼,跑出來結果一直是0, 感覺好像while loop都沒跑到... d_number直接印出剛一開始時initialize的值, 希望大家能給我一點意見, 但...太高深的寫法可能會看不懂...ㄒ.ㄒ 因為才剛開始學C而已, 像程式碼中指數那個函式怎麼用也是google才曉得的... 感激不盡!!! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.59.10.36

09/22 21:53, , 1F
程式分段測試,先把剛輸入的數值印來看它讀得對不對,再看其他
09/22 21:53, 1F

09/22 21:54, , 2F
09/22 21:54, 2F

09/22 21:55, , 3F
這讓我想到名題百則裡有份code 用exp跟log取某位數的值
09/22 21:55, 3F

09/22 21:57, , 4F
scanf要讀double請用 %lf
09/22 21:57, 4F

09/22 22:13, , 5F
感謝,我會都試試看...而且很囧的是...貼完又想了一下
09/22 22:13, 5F

09/22 22:14, , 6F
好像用%取餘數寫比較容易...不過還是想再試試這個XD
09/22 22:14, 6F
文章代碼(AID): #1CcWUVQ0 (C_and_CPP)
文章代碼(AID): #1CcWUVQ0 (C_and_CPP)