[問題] 一題阿姆斯壯數被CE

看板C_and_CPP作者 (專心致志)時間14年前 (2010/12/08 09:33), 編輯推噓4(4010)
留言14則, 9人參與, 最新討論串1/1
遇到的問題(Question): 測試輸入輸出沒問題 不過結果被打了個CE 餵入的資料(Input): 100 999 10 99 1 1000000 開發平台(Platform): (例: VC++, Gcc, OpenGL, Linux, ...) Dev C++ 程式碼(Code): (請善用置底文標色功能) #include <stdio.h> #include <stdlib.h> #include <math.h> int main(void) { char ch[8]; int a,b,i,flag=1; double sum; while(scanf("%d %d",&a,&b)!=EOF) { if(a>b) { i=a; a=b; b=i; } for(;a<=b;a++) { itoa(a,ch,10); i=0,sum=0; while(ch[i]!='\0') { sum+=pow((float)(ch[i]-48),(float)strlen(ch)); i++; } if(sum==a) { printf("%d ",a); flag=0; } } if(flag) printf("none"); flag=1; printf("\n"); } return 0; } 補充說明(Supplement): 請問那是哪裡被打CE呢? 我是在高中生解題系統解題 還有各位高手們覺得我的寫法有哪裡可以改進的嗎? 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 120.119.126.2

12/08 17:41, , 1F
sum == a ?
12/08 17:41, 1F

12/08 17:44, , 2F
#include <string.h> ?
12/08 17:44, 2F

12/08 17:44, , 3F
沒必要把數字再轉成字串處理,這樣慢很多.
12/08 17:44, 3F

12/08 17:44, , 4F
沒優化過的code: http://0rz.tw/q3Luf
12/08 17:44, 4F

12/08 17:46, , 5F
strlen這個function宣告在string.h裡
12/08 17:46, 5F

12/08 17:46, , 6F
另外pow最好自己寫,math.h裡的pow慢很多.
12/08 17:46, 6F
有加string.h了 不過還是被CE 感謝各位提供的意見 ※ 編輯: Mysteltainn 來自: 120.119.126.2 (12/08 18:00)

12/08 18:08, , 7F
2. 除錯文務必清楚列出錯誤訊息
12/08 18:08, 7F

12/08 18:19, , 8F
itoa 請改 sprintf
12/08 18:19, 8F

12/08 18:22, , 9F
CE可以看錯誤訊息
12/08 18:22, 9F
感謝各位的意見 改成sprintf就AC了 問題應該是出在itoa這個函數 請問是itoa這函數太舊了 解題系統不支援的關係嗎? ※ 編輯: Mysteltainn 來自: 120.119.126.2 (12/08 20:13)

12/08 23:02, , 10F
上網 google 一下就可以知道 itoa 是 non-standard 了啊
12/08 23:02, 10F

12/09 02:45, , 11F
CPlusPlus網站上沒記載的通常都是non-std
12/09 02:45, 11F

12/09 07:21, , 13F
開宗明義就跟你寫了 non-standard function
12/09 07:21, 13F

12/09 07:22, , 14F
Portability 的地方有教你如何改成用 sprintf()
12/09 07:22, 14F
文章代碼(AID): #1C_r3jYh (C_and_CPP)