追記
Ozyさんのコメントを参考に150の壁を突破して149B
n,v,t[1002][76]={48}; main(char*c){ for(;n+1e3;v=n%2|1,strrev(t-n--)) for(c=t-n;*c|v;v/=10) c++[304]=(v+=*c*2%48)%10+48; while(~scanf("%d",&n))puts(t+n); }
負数 % 正数 が負数になるのを利用している。
余りが-1のとき(-1|1) -> -1
余りが 0のとき( 0|1) -> 1