読者です 読者をやめる 読者になる 読者になる

UVa10633 Rare Easy Problem

http://uva.onlinejudge.org/external/106/10633.html

問題概要
2桁以上の整数Nと、Nの下一桁を取り除いた整数Mが与えられる。N-M の値があなたに伝えられるので、もとのNの候補を昇順ソートして全て示せ。

解法

#include <bits/stdc++.h>

using namespace std;

typedef unsigned long long ull;

int main() {
  ull X; // X = N-M
  
  while(cin >> X && X) {
    vector<ull> ans;
    ull N1 = X*10/9;
    ull M1 = N1/10; // cut off the last digit
    if(N1-M1 == X) ans.push_back(N1); // Evaluation 9*N1 == 10*X is not applied.
    for(ull i=1; ; i++) {
      ull Ncand = N1 + i, Mcand = Ncand/10;
      if(Ncand-Mcand == X) ans.push_back(Ncand);
      else break;
    }
    for(ull i=1; ; i++) {
      ull Ncand = N1 - i, Mcand = Ncand/10;
      if(Ncand-Mcand == X) ans.push_back(Ncand);
      else break;
    }
    
    sort(ans.begin(), ans.end());
    
    for(ull i=0; i<ans.size(); i++) {
      if(i) cout << ' ';
      cout << ans[i];
    }
    cout << endl;
  }
  
  return 0;
}