結果

問題 No.428 小数から逃げる夢
ユーザー 👑 CleyLCleyL
提出日時 2020-03-03 02:54:56
言語 C++14
(gcc 12.3.0 + boost 1.83.0)
結果
AC  
実行時間 2 ms / 1,000 ms
コード長 5,015 bytes
コンパイル時間 1,004 ms
コンパイル使用メモリ 78,556 KB
実行使用メモリ 5,248 KB
最終ジャッジ日時 2024-10-13 21:39:41
合計ジャッジ時間 3,506 ms
ジャッジサーバーID
(参考情報)
judge4 / judge3
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 2 ms
5,248 KB
testcase_01 AC 1 ms
5,248 KB
testcase_02 AC 2 ms
5,248 KB
testcase_03 AC 1 ms
5,248 KB
testcase_04 AC 1 ms
5,248 KB
testcase_05 AC 2 ms
5,248 KB
testcase_06 AC 1 ms
5,248 KB
testcase_07 AC 2 ms
5,248 KB
testcase_08 AC 2 ms
5,248 KB
testcase_09 AC 2 ms
5,248 KB
testcase_10 AC 1 ms
5,248 KB
testcase_11 AC 1 ms
5,248 KB
testcase_12 AC 1 ms
5,248 KB
testcase_13 AC 2 ms
5,248 KB
testcase_14 AC 2 ms
5,248 KB
testcase_15 AC 2 ms
5,248 KB
testcase_16 AC 2 ms
5,248 KB
testcase_17 AC 1 ms
5,248 KB
testcase_18 AC 2 ms
5,248 KB
testcase_19 AC 1 ms
5,248 KB
testcase_20 AC 2 ms
5,248 KB
testcase_21 AC 1 ms
5,248 KB
testcase_22 AC 2 ms
5,248 KB
testcase_23 AC 2 ms
5,248 KB
testcase_24 AC 2 ms
5,248 KB
testcase_25 AC 1 ms
5,248 KB
testcase_26 AC 2 ms
5,248 KB
testcase_27 AC 1 ms
5,248 KB
testcase_28 AC 2 ms
5,248 KB
testcase_29 AC 2 ms
5,248 KB
testcase_30 AC 2 ms
5,248 KB
testcase_31 AC 2 ms
5,248 KB
testcase_32 AC 2 ms
5,248 KB
testcase_33 AC 2 ms
5,248 KB
testcase_34 AC 2 ms
5,248 KB
testcase_35 AC 1 ms
5,248 KB
testcase_36 AC 1 ms
5,248 KB
testcase_37 AC 2 ms
5,248 KB
testcase_38 AC 1 ms
5,248 KB
testcase_39 AC 2 ms
5,248 KB
testcase_40 AC 2 ms
5,248 KB
testcase_41 AC 2 ms
5,248 KB
testcase_42 AC 1 ms
5,248 KB
testcase_43 AC 1 ms
5,248 KB
testcase_44 AC 2 ms
5,248 KB
testcase_45 AC 1 ms
5,248 KB
testcase_46 AC 2 ms
5,248 KB
testcase_47 AC 2 ms
5,248 KB
testcase_48 AC 1 ms
5,248 KB
testcase_49 AC 2 ms
5,248 KB
testcase_50 AC 2 ms
5,248 KB
testcase_51 AC 2 ms
5,248 KB
testcase_52 AC 2 ms
5,248 KB
testcase_53 AC 2 ms
5,248 KB
testcase_54 AC 2 ms
5,248 KB
testcase_55 AC 1 ms
5,248 KB
testcase_56 AC 2 ms
5,248 KB
testcase_57 AC 1 ms
5,248 KB
testcase_58 AC 2 ms
5,248 KB
testcase_59 AC 2 ms
5,248 KB
testcase_60 AC 2 ms
5,248 KB
testcase_61 AC 2 ms
5,248 KB
testcase_62 AC 2 ms
5,248 KB
testcase_63 AC 1 ms
5,248 KB
testcase_64 AC 2 ms
5,248 KB
testcase_65 AC 2 ms
5,248 KB
testcase_66 AC 2 ms
5,248 KB
testcase_67 AC 1 ms
5,248 KB
testcase_68 AC 2 ms
5,248 KB
testcase_69 AC 1 ms
5,248 KB
testcase_70 AC 1 ms
5,248 KB
testcase_71 AC 2 ms
5,248 KB
testcase_72 AC 2 ms
5,248 KB
testcase_73 AC 2 ms
5,248 KB
testcase_74 AC 1 ms
5,248 KB
testcase_75 AC 1 ms
5,248 KB
testcase_76 AC 2 ms
5,248 KB
testcase_77 AC 1 ms
5,248 KB
testcase_78 AC 2 ms
5,248 KB
testcase_79 AC 1 ms
5,248 KB
testcase_80 AC 1 ms
5,248 KB
testcase_81 AC 2 ms
5,248 KB
testcase_82 AC 2 ms
5,248 KB
testcase_83 AC 1 ms
5,248 KB
testcase_84 AC 2 ms
5,248 KB
testcase_85 AC 1 ms
5,248 KB
testcase_86 AC 2 ms
5,248 KB
testcase_87 AC 2 ms
5,248 KB
testcase_88 AC 2 ms
5,248 KB
testcase_89 AC 1 ms
5,248 KB
testcase_90 AC 2 ms
5,248 KB
testcase_91 AC 2 ms
5,248 KB
testcase_92 AC 2 ms
5,248 KB
testcase_93 AC 2 ms
5,248 KB
testcase_94 AC 1 ms
5,248 KB
testcase_95 AC 2 ms
5,248 KB
testcase_96 AC 2 ms
5,248 KB
testcase_97 AC 2 ms
5,248 KB
testcase_98 AC 1 ms
5,248 KB
testcase_99 AC 2 ms
5,248 KB
権限があれば一括ダウンロードができます
コンパイルメッセージ
main.cpp: In member function 'BigInt BigInt::operator*=(const BigInt&)':
main.cpp:146:3: warning: no return statement in function returning non-void [-Wreturn-type]
  146 |   }
      |   ^

ソースコード

diff #

#include <iostream>
#include <algorithm>
using namespace std;
struct BigInt{
  string val;
  BigInt():val("0"){}
  BigInt(string s){
    if(s == "0"){
      val = "0";
      return;
    }
    bool firstdigit = false;
    for(int i = 0; s.size() > i; i++){
      if('0' <= s[i] && s[i] <= '9'){
        if(!firstdigit && s[i] == '0')continue;
        firstdigit = true;
        val.push_back(s[i]);
      }else if(s[i] == '-' && val.empty()){
        val.push_back(s[i]);
      }else{
        val = "0";
        break;
      }
    }
  }
  BigInt abs(BigInt p){
    if(p.val[0] == '-'){
      p.val = p.val.substr(1,p.val.size()-1);
    }
    return p;
  }
  BigInt SignTurn(BigInt p){
    if(p.val[0] == '-'){
      p.val = p.val.substr(1,p.val.size()-1);
    }else{
      p.val = "-" + p.val;
    }
    return p;
  }
  BigInt max(BigInt a,BigInt b){
    if(a.val.size() > b.val.size()){
      return a;
    }else if(a.val.size() < b.val.size()){
      return b;
    }else{
      for(int i = 0; a.val.size()> i; i++){
        if(a.val[i] > b.val[i]){
          return a;
        }
        if(a.val[i] < b.val[i]){
          return b;
        }
      }
    }
    return a;
  }

  BigInt operator+=(const BigInt &p){
    BigInt z = *this;
    BigInt k = p;
    if(z.val[0] == '-' && p.val[0] == '-'){
      return  SignTurn(abs(z)+abs(k));//(-123)+(-124) -> -((123)+(124))
    }else if(z.val[0] == '-'){
      return k-abs(z);//(-123)+(124) -> (124)-(123)
    }else if(p.val[0] == '-'){
      return (z)-abs(k);//(123)+(-124) -> (123)-(124)
    }else{
      //123 + 1234
      bool Mvup = false;
      string ret = "";
      if(z.val.size() < k.val.size()){
        swap(z,k);
      }
      //val.size() > k.val.size();
      for(int i = z.val.size()-1; 0 <= i; i--){
        if(z.val.size()-k.val.size() > i){
          //val[i]+Mvup
          ret.push_back(((z.val[i]-'0'+(Mvup?1:0))%10)+'0');
          Mvup = ((z.val[i]-'0'+(Mvup?1:0))>=10);
        }else{
          //val[i],k.val[i-(val.size()-k.val.size())]+Mvup
          ret.push_back(((z.val[i]-'0'+k.val[i-(z.val.size()-k.val.size())]-'0'+(Mvup?1:0))%10)+'0');
          Mvup = ((z.val[i]-'0'+k.val[i-(z.val.size()-k.val.size())]-'0'+(Mvup?1:0)) >= 10);
        }
      }
      if(Mvup)ret.push_back('1');
      reverse(ret.begin(),ret.end());
      if(ret.empty())ret.push_back('0');
      z.val = ret;
    }
    return z;

  }
  BigInt operator-=(const BigInt &p){
    BigInt z = *this;
    BigInt k = p;
    if(z.val[0] == '-' && k.val[0] == '-'){
      return (z)+abs(k);//(-123)-(-123) -> (-123)+(123)
    }else if(z.val[0] == '-'){
      return (z)+SignTurn(k);//(-123)-(123) -> (-123)+(-123)
    }else if(k.val[0] == '-'){
      return abs(k)+(z);//(123)-(-123) -> (123)+(123)
    }else{
      string ret = "";
      //z >= k
      bool Mvdwn = false;
      bool minus = false;
      if(max((z),k) != z){
        minus = true;
        swap(z,k);
      }
      for(int i = z.val.size()-1; 0 <= i; i--){
        if(z.val.size() - k.val.size() > i){
          if(z.val[i]-'0' < (Mvdwn?1:0)){
            ret.push_back(10+z.val[i]-(Mvdwn?1:0));
            Mvdwn = true;
          }else{
            ret.push_back(z.val[i]-(Mvdwn?1:0));
            Mvdwn = false;
          }
        }else{
          if(z.val[i] < k.val[i-(z.val.size()-k.val.size())]+(Mvdwn?1:0)){
            ret.push_back(10+z.val[i]-(k.val[i-(z.val.size()-k.val.size())]+(Mvdwn?1:0)) + '0');
            Mvdwn = true;
          }else{
            ret.push_back(z.val[i]- (k.val[i-(z.val.size()-k.val.size())]+(Mvdwn?1:0)) + '0');
            Mvdwn = false;
          }
        }
      }
      while(ret[ret.size()-1] == '0' && ret.size() > 1)ret.pop_back();
      if(minus)ret.push_back('-');
      if(ret.empty())ret.push_back('0');
      reverse(ret.begin(),ret.end());
      z.val = ret;
    }
    return z;
  }
  BigInt operator*=(const BigInt &p){
    BigInt z = *this;
    BigInt k = p;
    bool hugo = false;
    if((z.val[0] == '-') + (p.val[0] == '-') == 1)hugo = true;
    z = abs(z);k = abs(k);
    
  }
  BigInt operator+(const BigInt &p){return (*this) += p;}
  BigInt operator-(const BigInt &p){return (*this) -= p;}

  bool operator==(const BigInt &p){return val == p.val;}
  bool operator!=(const BigInt &p){return val != p.val;}

  string retst(){
    return val;
  }


  friend ostream &operator<<(ostream &os, const BigInt &p){
    return os << p.val;
  }
  friend istream &operator>>(istream &is, BigInt &p){
    string s;
    cin>>s;
    p = BigInt(s);
    return (is);
  }
};

int main(){
  BigInt z("1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991");
  int n;cin>>n;
  BigInt x("0");
  for(int i = 0; n > i; i++){
    x = x+z;
  }
  string s = x.retst();
  if(190 == s.size()){
    cout << "0.";
  }
  for(int i = 0; s.size() > i; i++){
    cout << s[i];
    if(s.size()-i-1 == 190)cout << ".";
  }
  cout << endl;
}
0