結果
問題 | No.428 小数から逃げる夢 |
ユーザー |
![]() |
提出日時 | 2016-10-02 22:33:17 |
言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
結果 |
AC
|
実行時間 | 2 ms / 1,000 ms |
コード長 | 3,699 bytes |
コンパイル時間 | 1,710 ms |
コンパイル使用メモリ | 109,508 KB |
実行使用メモリ | 5,248 KB |
最終ジャッジ日時 | 2024-11-21 13:16:13 |
合計ジャッジ時間 | 3,658 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 100 |
ソースコード
#include <algorithm>#include <cstdio>#include <cstdlib>#include <cctype>#include <cmath>#include <iostream>#include <queue>#include <list>#include <stack>#include <map>#include <numeric>#include <set>#include <sstream>#include <string>#include <vector>using namespace std;#define REP(i,a,n) for(int i=(a); i<(int)(n); i++)#define rep(i,n) REP(i,0,n)#define FOR(it,c) for(__typeof((c).begin()) it=(c).begin(); it!=(c).end(); ++it)#define ALLOF(c) (c).begin(), (c).end()typedef long long ll;typedef unsigned long long ull;class Bignum{public:Bignum(){}Bignum(string s){for(int i=0;i<s.length();i++) d.push_front(s[i]-'0');normalize();}Bignum &normalize(){for(int i=d.size()-1;i>=0;i--){ if(d[i]!=0) break; d.pop_back(); }return *this;}int operator[](int i){ return i>=d.size()?0:d[i]; }int size(){ return normalize(),d.size(); }void toZero(){ d.clear(); d.push_front(0); }void toOne(){ d.clear(); d.push_front(1); }Bignum &inc(){ Bignum one("1"); return operator+=(one); }Bignum &operator+=(Bignum n){int l=max(size(),n.size());d.resize(l+1,0);for(int c=0,i=0;i<=l;i++) d[i]=(c=d[i]+n[i]+c/10)%10;return normalize();}Bignum &operator-=(Bignum n){//assert(size()>=n.size());for(int c=0,i=0;i<d.size();i++) d[i]=((c=d[i]-n[i]+(c-9)/10)+10)%10;return normalize();}Bignum &operator*=(int n){for(int i=0;i<15;i++) d.push_back(0);for(int c=0,i=0;i<d.size();i++) d[i]=(c=d[i]*n+c/10)%10;return normalize();}Bignum &operator*=(ull n){for(int i=0;i<25;i++) d.push_back(0);for(ull c=0,i=0;i<d.size();i++) d[i]=(c=d[i]*n+c/10ULL)%10ULL;return normalize();}Bignum operator+(Bignum n){ return Bignum(*this)+=n; }Bignum operator-(Bignum n){ return Bignum(*this)-=n; }Bignum operator*(int n){ return Bignum(*this)*=n; }Bignum operator*(ull n){ return Bignum(*this)*=n; }Bignum operator*(Bignum n){Bignum ret;int ka=size(),kb=n.size();ret.d.resize(ka+kb,0);for(int i=0;i<ka;i++) for(int c=0,j=0;j<=kb;j++) ret.d[i+j]=(c=ret.d[i+j]+d[i]*n[j]+c/10)%10;return ret.normalize();}Bignum &operator*=(Bignum n){ return (*this)=(*this)*n; }int div(int n){int c=0;for(int i=size()-1;i>=0;i--) d[i]=(c=c%n*10+d[i])/n;return c%n;}Bignum &operator<<=(int n){for(int i=0;i<n;i++) d.push_front(0);return normalize();}Bignum operator<<(int n){ return Bignum(*this)<<=n; }bool operator>(Bignum n){if(size()!=n.size()) return size()>n.size();for(int i=size()-1;i>=0;i--) if(d[i]!=n[i]) return d[i]>n[i];return false;}deque<int> d;};pair<Bignum,Bignum> ldiv(Bignum a, Bignum b){Bignum ret;for(int i=a.size()-1;i>=0;i--){int n;for(n=1;n<10;n++) if(((b*n)<<i)>a) break;a-=(b*(n-1))<<i;ret.d.push_front(n-1);}return make_pair(ret.normalize(),a.normalize());}ostream &operator<<(ostream &os, const Bignum &l){Bignum n=l;if (n.size()==0) os<<0;else for (int i=n.d.size()-1;i>=0;i--) os<<n.d[i];return os;}int main(){ios::sync_with_stdio(false);string str = "1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991";Bignum a(str);string N;cin >> N;Bignum b(N);Bignum ab = a * b;stringstream ss;for(int i=ab.d.size()-1; i>=0; i--) ss << ab.d[i];string ret = ss.str();if(ret.size() == str.size()){cout << "0";}rep(i,ret.size()){if(i == ret.size()-str.size()) cout << ".";cout << ret[i];}cout << endl;return 0;}