問題はこちら
No.656 ゴルフ - yukicoder
やるだけ
int main(){ int s=0; for(int i=0;i<9;i++){ int c=getchar()-48; if(c==0)s+=10; else s+=c; } printf("%d",s); }
1文字ずつ見るタイプの問題は、getcharとreadどちらを使うか、最後の改行をどうするか、といったことを考える必要がある。
とりあえずgetchar()-48?:10 という方法をすぐ思いつくが、実はもっと短い方法がある。
'0'が'9'より大きくなって欲しいので、49で剰余をとればよい。このとき'1'~'9'は0~8になるので、'0'は9になってほしい。なのでさらに39で剰余をとる。
これらを合計すると答えより9小さい値が出てくるが、'\n'の10が足されるので答えより1大きくなる。よって正負を反転させてbit反転すればよい。
s;main(i){for(;i=getchar()-10;)s+=i-38?:10;printf("%d",s);} s;main(i){for(;i=~getchar();)s-=i%50%40;printf("%d",s-2);} s;main(i){for(;read(0,&i,1);)s-=i%49%39;printf("%d",~s);}
57B