看板 C_and_CPP 關於我們 聯絡資訊
作那邊的題目有幾個問題想請教大家。 a032 的題目是輸入整數 n,輸出 n! 的值,但結果不大於 2^63。 (為啥要要求不大於 2^63?) 我的程式是寫這樣: #include <iostream> #include <math.h> using namespace std; int main(){ int n,i; while(cin>>n){ if(n==0||n==1){ cout<<1<<endl; } else{ int j=1; for(i=2;i<=n;i++){ j*=i; } cout<<j<<endl; } } return 0; } 自己電腦測試是都OK,不過送出去是 WA...... 「與正確輸出不相符(line:14) 您的答案為: 1932053504 正確答案為: 6227020800」 本以為是 int j 搞鬼,但是換成 long j、float j、double j,結果還是 WA? 哪裡有錯呢? 然後它說 "必須在程式中放入一個 while 迴圈來讀取所有的測試資料", 我不懂這是甚麼意思,@@? (我目前只會用 for, if, else) 我是照 a001 依樣畫葫蘆的。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 125.229.246.181
siuol:unsign long long int~ 04/10 10:39
loveme00835:別問程式為你做了什麼, 先問你對程式做了什麼... 04/10 10:41
loveme00835:程式: 我病得好嚴重阿~~ 你還要我做事 04/10 10:41
kyoiku:AC了,@@。long long int 我書上沒這個東西說...... 04/10 10:43
tjjh89017:1F 不是unsigned long long int 嗎? 04/10 10:44
loveme00835:AC 然後你就繼續寫下一題了...真害, 雖然成就感有了, 04/10 10:44
kyoiku:請問 AC 後面的 (4ms,708kb) 是啥意思,@@? 04/10 10:44
loveme00835:但老實說你程式能力並沒進步 04/10 10:44
kyoiku:我是打算用作數學的方式,狂作題目,不會再看書找或問 04/10 10:45
loveme00835:所以你是先學會寫作文才練ㄅㄆㄇ? 04/10 10:47
loveme00835:也不是說不行...但就好像老外學中文, 腔永遠不對, 詞 04/10 10:50
loveme00835:永遠都用不好 04/10 10:50
suhorng:結果不大於 2^63 是題目給你的保證 04/10 10:52
loveme00835:2的冪次方一出現表示和數值的極限有關, 這個東西在你 04/10 10:53
loveme00835:學會 if 之前就該會的東西, 教科書通常會擺在最前面 04/10 10:54
loveme00835:不是你跳太快, 就是書選得不好 04/10 10:55
stimim:我覺得「排版」應該要放在所有教科書的第一章... 04/10 10:57
ericinttu:程式, 是細心的邏輯架構出來的成品. 每一行指令都徹底了 04/10 11:13
ericinttu:解之後, 就省掉『狂』作題目之舉了. 04/10 11:14
ericinttu:狂, 比較像是以一擋千的衝鋒陷陣. 但程式之妙,在於部陣. 04/10 11:15
ericinttu:不過, 高中生嘛, 懂多少算多少. 我大學畢業也沒懂多少. 04/10 11:16
Hurricaneger:對不起我看不懂前面那個 int j是哪招 04/10 11:23
Hurricaneger:int j=1 04/10 11:24
Hurricaneger:我不是說你錯,因為我不會寫程式,單純想問而已 04/10 11:25
ericinttu:j是放最後答案的地方, 初始值給1之後, 才能夠連乘下去. 04/10 11:25
note35:推第一章應該先教排版 真的很重要 04/10 12:40
james732:到底是誰說初學程式應該要一直做題目的...XD 04/10 13:41
ericinttu:要練成反射動作吧 (誤) 04/10 13:56
zephyrhymn:邏輯和基礎,應該還是後者優先吧... 04/10 14:18
firejox:我發現我是造成錯誤的推手...XD 04/10 14:32
firejox:排版是很重要的 當要請你隊友幫忙DEBUG時... 04/10 14:34
firejox:噁心的排版會讓你隊友很火~~~ 04/10 14:35
jacky1989:排版排版,排版不良的程式沒必要看~~ 04/10 15:27
loveme00835:x1, x2, x3 流水號命名, t, u, v, x 無所不包型 04/10 17:29
loveme00835:或是過短型 e(錯誤), c(計數), s(總和) 的命名都應該 04/10 17:30
loveme00835:避免, 因為這顯示了你沒有花心思在編程上面, 直接把特 04/10 17:31
loveme00835:定領域的習慣給帶進來(數學上用流水號標示集合內元素) 04/10 17:32
loveme00835:但是該作法是為了縮減版面及方便使然, 建構軟體講求的 04/10 17:33
loveme00835:是精確, 在IDE跟硬體支援下, 你要做的就是儘量把商業 04/10 17:34
loveme00835:邏輯寫進去 04/10 17:34
loveme00835:阿還有重複型 a, aa, aaa, aaaa 04/10 17:41
chinagogoya:這很簡單啊,用遞迴就搞定了 04/10 19:10
firejox:其實在競賽時 誰會管那麼多 只要能夠理解看懂比較重要 04/10 19:50
firejox:講求速度的原因 簡潔的表達都是很重要的 04/10 19:51
loveme00835:那我也不知道這種人出去比賽有什麼用了, 英打明明不 04/10 20:10
loveme00835:難練 04/10 20:10
firejox:其實我s都是代表陣列 i,j都用在迴圈 04/10 20:21
firejox:u,v是代表圖的結點 e是邊 04/10 20:22
loveme00835:陣列也有用途, 像是裝硬幣 coins, 裝卡片 cards 04/10 20:22
loveme00835:u,v 也可以代表紫外線, 然後 e代表電子 04/10 20:24
firejox:陣列名稱也有用dp代表的 04/10 20:24
loveme00835:你知道, 別人不一定知道, 你以為慣用, 但在非理工科系 04/10 20:24
firejox:紫外線是哪招啊 04/10 20:25
loveme00835:的人眼裡這根本不代表什麼 04/10 20:25
loveme00835:因為使用 dp 而把陣列叫 dp, 你真的有把握知道你的陣 04/10 20:26
loveme00835:列裝的東西叫什麼東西嗎? typedef 來抽象化試試 04/10 20:27
firejox:恩恩 我會試試抽象化 04/10 20:29
firejox:反正是陣列 04/10 20:31
loveme00835:看你對待它是一塊記憶體, 還是一棟大樓的柱子, 寫出來 04/10 20:40
loveme00835:即使是一個變數, 感覺也會很不一樣 04/10 20:40
zephyrhymn:這又扯到Refactoring的領域吧 04/10 23:40
Yshuan:就算是競賽 我也要求隊友 ijk滾開 命名題目都會給n,m是啥 04/11 06:32
Yshuan:照題目說的去命 這樣講完題目再看程式就一目瞭然 04/11 06:33
Yshuan:dp命名是允許的 dp題型我們只驗證遞迴式... LOC少超過30 04/11 06:34
Yshuan:然後必須要講一點 變數命名重要是因為readable >> 可寫性 04/11 06:36
Yshuan:有水準的隊伍 前三題彼此間是不干涉的 這邊有WA 那就掰了 04/11 06:37
Yshuan:所以競賽code被看的次數的確不多 所以變數命名就不太苛求 04/11 06:37
Yshuan:不過練習題目則不然 因此這篇文的作者 還是請做好基本功~ 04/11 06:39
xatier:其實firejox本人的code... 很可怕(抖) @_@ 04/11 07:39
xatier:<-- 我是他同校隊的學長:P 04/11 07:39
james732:可怕是怎麼個可怕法? (好奇 XDD) 04/11 07:45
xatier:#1DVEWS1W 他習慣}大括號前多一個teb =..= 04/11 11:26
xatier:小程式還好,兩三百行以上時很容易混淆block 04/11 11:27
xatier:而且他很喜歡用bitwise 運算子 //這部份他超有研究的! 04/11 11:27
Yshuan:bitwise對常數時間剪很大 像10k^2的運算 常數就是TL的關鍵 04/11 14:34
firejox:要看我的code請用樹狀圖 比較可以看的懂XD 04/11 22:57