結果
| 問題 |
No.428 小数から逃げる夢
|
| コンテスト | |
| ユーザー |
Kmcode1
|
| 提出日時 | 2016-10-02 22:24:25 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
| 結果 |
AC
|
| 実行時間 | 2 ms / 1,000 ms |
| コード長 | 2,629 bytes |
| コンパイル時間 | 1,684 ms |
| コンパイル使用メモリ | 164,600 KB |
| 実行使用メモリ | 6,824 KB |
| 最終ジャッジ日時 | 2024-11-21 13:09:58 |
| 合計ジャッジ時間 | 3,791 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 100 |
ソースコード
#include<bits/stdc++.h>
using namespace std;
string s = "1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991";
string pluss(string a, string b, bool flag = false){
if (!flag){
reverse(a.begin(), a.end());
reverse(b.begin(), b.end());
}
if (a.size() > b.size()){
swap(a, b);
}
string ans;
ans.clear();
long long int want = 0;
for (int i = 0; i < a.size(); i++){
long long int val = a[i] - '0';
val += b[i] - '0';
val += want;
want = val / 10LL;
val %= 10LL;
ans.push_back(val + '0');
}
for (int j = a.size(); j < b.size(); j++){
long long int val = 0;
val += b[j] - '0';
val += want;
want = val / 10LL;
val %= 10LL;
ans.push_back(val + '0');
}
while (want){
ans.push_back(want % 10 + '0');
want /= 10;
}
if (!flag){
reverse(ans.begin(), ans.end());
}
if (ans.size() == 0)ans = "0";
return ans;
}
string mult(string a, string b, bool flag = false){
if (!flag){
reverse(a.begin(), a.end());
reverse(b.begin(), b.end());
}
string ans = "0";
string pas;
string kari;
pas.clear();
for (int i = 0; i < b.size(); i++){
long long int bb = b[i] - '0';
long long int tmp = 0;
kari = pas;
for (int j = 0; j < a.size(); j++){
long long int val = (long long int)(a[j] - '0')*bb;
val += tmp;
tmp = val / 10LL;
val %= 10LL;
kari.push_back(val + '0');
}
while (tmp){
kari.push_back((tmp % 10LL) + '0');
tmp /= 10LL;
}
ans = pluss(ans, kari, true);
//end
pas.push_back('0');
}
if (!flag){
reverse(ans.begin(), ans.end());
}
if (ans.size() == 0)ans = "0";
return ans;
}
string minuss(string a, string b){
reverse(b.begin(), b.end());
reverse(a.begin(), a.end());
while (a.size()>b.size()){
b.push_back('0');
}
while (a.size()<b.size()){
a.push_back('0');
}
bool carry = false;
for (int i = 0; i<a.size(); i++){
if (a[i] != '0'&&carry){
a[i]--;
carry = false;
}
if (a[i] == '0'&&carry){
a[i] = '9';
}
if (a[i] >= b[i]){
a[i] = (a[i] - '0') - (b[i] - '0') + '0';
}
else{
a[i] = (10 + (a[i] - '0') - (b[i] - '0')) + '0';
carry = true;
}
}
while (a.size()>1 && a.back() == '0'){
a.pop_back();
}
reverse(a.begin(), a.end());
return a;
}
int main(){
string f;
cin >> f;
s = mult(s, f);
string ansA = s.substr(0, s.size()-190);
string ansB = s.substr(-190 + s.size(), 190);
while (ansB.size() && ansB.back() == '0'){
ansB.pop_back();
}
if (ansA.size() == 0){
ansA.push_back('0');
}
cout << ansA << "." << ansB << endl;
return 0;
}
Kmcode1