公式

C - Cut .0 解説 by physics0523


解法1. 実は上手く行く解法

C++ の場合は、 double 型として \(X\) を受け取り特に書式設定をせずそのまま出力すればこの問題に正解できます。これは、過剰な 0 を末尾に出力しない仕組みになっているからです。他のプログラミング言語にも、これに類する機能が存在する場合があります。
とはいえ、この手法は常に使える方法ではありません。他の方法も考えましょう。

実装例 (C++):

#include<bits/stdc++.h>

using namespace std;

int main(){
  double x;
  cin >> x;
  cout << x << "\n";
  return 0;
}

解法2. 文字列の問題として処理する

\(X\) を文字列として受け取り、以下の処理を施して出力することでこの問題に正解できます。

  • 末尾が 0 である限り、その文字を削除することを繰り返す。
  • その後、末尾が . であればそれも削除する。

この方法は、入力に必ず小数点が存在するおかげで「末尾が 0 である限り、その文字を削除することを繰り返す。」ということが行われている限りそこは小数点以下にある過剰な末尾の 0 であることからうまく行きます。

実装例 (C++):

#include<bits/stdc++.h>

using namespace std;

int main(){
  string x;
  cin >> x;
  while(x.back()=='0'){x.pop_back();}
  if(x.back()=='.'){x.pop_back();}
  cout << x << "\n";
  return 0;
}

投稿日時:
最終更新: