AOJ : 0233 - 図書整理 (Book Arrangement)
問題概要
http://rose.u-aizu.ac.jp/onlinejudge/ProblemSet/description.jsp?id=0233&lang=jp
日本語なので, 問題の説明は省略です.
アルゴリズム
下位桁から順番に-10進数を作成していけば解けます.
ただし, 途中繰り上がり処理等を書かなければいけない箇所があるため, 注意が必要です.
プログラム
typedef long long ll; string itos(ll x){stringstream ss;ss<<x;return ss.str();}; int main(void){ ll x; while(cin>>x,x){ bool flg = false; if(x < 0){ flg = true; x = -x; } string s = itos(x); ll ans = 0; ll p = 1; //下位桁から順番に見ていく for(int i=0;i<s.length();i++,p*=10){ ll digit = s[s.length()-i-1] - '0'; //0は無視 if(digit == 0) continue; if(i % 2 == 0 && !flg || i % 2 == 1 && flg){ ans += digit * p; //繰り上げ処理 if(ans >= p*10){ ll tmp = ans / (p*10); ans = ans % (p*10) + (20 - tmp) * p * 10; } } else{ ans += (20 - digit) * p; //繰り上げ処理 if(ans >= p*20){ ans -= p*20; } } } cout<<ans<<endl; } return 0; }