作者e158420502 (阿泰)
看板C_and_CPP
標題[問題] C語言 二進位轉十進位
時間Fri Mar 23 23:40:22 2012
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) Dev C++
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) No
問題(Question): 二進位轉十進位 輸入字元數超過10位數會變成負的
餵入的資料(Input): 11111111111
預期的正確結果(Expected Output): 2047
錯誤結果(Wrong Output): -1015
程式碼(Code):(請善用置底文網頁, 記得排版) #include<stdio.h>
#include<math.h>
int main()
{
long int input;
long int i,bit;
long int C_result=0;
printf("Input an integer containing only 0s and 1s: ");
scanf("%ld",&input);
for(i=0;input!=0;input/=10)
{
bit=input%2;
C_result=C_result + bit*pow(2,i);
i++;
}
printf("Result of convertion is %ld \n",C_result);
system("Pause");
return(0);
}
補充說明(Supplement): 我覺得是int宣告的長度問題 但是我換成long int 還是無法
有請各位幫忙了~~
--
推 Ainia:我打簽名擋 .....03/12 22:04
→ Ainia: 黨03/12 22:04
→ Ainia: 擋03/12 22:04
→ Ainia: 檔 = = 沒帶眼睛 手字旁跟木字旁根本在婊我03/12 22:05
→ Ainia:... 是眼鏡03/12 22:05
→ Ainia:可以不要變成簽名檔嗎 ...03/12 22:06
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.118.232.71
→ cooper6334:何不把input直接存成字串再以char為單位處理? 03/23 23:48
→ e158420502:剛學沒多久 不是很清楚char如何使用@@ 03/23 23:58
→ rock1985:long int 好像爆掉了,range沒這麼大 03/24 00:20
→ e158420502:我想也是 不過有其他可以不要讓他爆的宣告嗎? 03/24 00:25
推 KoenigseggG:long long int 03/24 00:38
推 loveme00835:0.0 03/24 01:05
→ e158420502:long long int 可以!!! 太強大了XDD 03/24 01:41
→ loveme00835:看來我不適合推文y 03/24 01:43
→ loveme00835:有用 long long 的必要嗎? 根本搞錯重點 03/24 01:59
→ e158420502:感謝L大 但是我們似乎沒教這麼多= =? 如果要到32位 03/24 10:11
→ e158420502:都有效 哪應該改掉甚麼 還是只能靠char來換? 03/24 10:12
→ james732:嘮叨一下,寫程式不可以說「這個我們沒教過」來當藉口 03/24 10:30
→ diabloevagto:unsign? 03/24 11:04
→ e158420502:j大 知道了~ 我會再研究的 謝謝指教=) 03/24 13:33
→ loveme00835:"不要自己算" 就是最省的做法 03/24 14:24
→ loveme00835:我寫的這些學校才沒有教 03/24 14:26
→ loveme00835:寫那種初心者也看得懂的code是侮辱你 03/24 14:27
→ firejox:L大 其實用unsigned long 去接strtoul 會比較好 03/24 21:36
→ firejox:畢竟是同一個型態... 03/24 21:37
→ loveme00835:ISO/IEC 989 6.3.1.3.1 依靠 implicit conversion 轉 03/24 21:47
→ loveme00835:成已知 bits 數的型別, 無 padding 後續位移就不用因 03/24 21:48
→ loveme00835:為給太多 assumptions 跑出奇怪結果自擾 03/24 21:49
→ loveme00835:是 9899 03/24 21:50
→ firejox:嗯嗯 長知識:) 03/24 22:01
→ Godmyfriend:剛學的時候我用getche()寫 03/25 00:22
→ e158420502:但是我照L大的跑過一次 每次要求別的值就要重新輸入 03/26 01:10
→ e158420502:然後讓她Run 我一開始想弄的是可依照使用者輸入的值 03/26 01:11
→ e158420502:做輸出~ 03/26 01:11