結果
| 問題 |
No.428 小数から逃げる夢
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2018-07-03 23:05:20 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 3 ms / 1,000 ms |
| コード長 | 2,050 bytes |
| コンパイル時間 | 626 ms |
| コンパイル使用メモリ | 67,840 KB |
| 実行使用メモリ | 5,376 KB |
| 最終ジャッジ日時 | 2024-07-01 02:03:27 |
| 合計ジャッジ時間 | 2,958 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 100 |
ソースコード
#include <iostream>
#include <string>
#include <string.h>
using namespace std;
string add(string s1,string s2)
{
const int MAX_NUM=200;
int op1[MAX_NUM];
int op2[MAX_NUM];
int i;
for (i=0;i<MAX_NUM;i++){
op1[i]=0;
op2[i]=0;
}
size_t sLen1=s1.size();
size_t sLen2=s2.size();
i=(int)(sLen1-1);
int j=0;
while (i>=0){
op1[j++]=s1[i]-'0';
i--;
}
j=0;
i=(int)(sLen2-1);
while (i>=0){
op2[j++]=s2[i]-'0';
i--;
}
size_t sLen=max(sLen1,sLen2);
int C=0;
for (i=0;i<sLen;i++){
op1[i]+=op2[i];
}
for (i=0;i<sLen;i++){
op1[i] +=C;
if (op1[i]>=10){
op1[i]-=10;
C=1;
}else{
C=0;
}
}
if (C>0){
op1[i]=C;
C=0;
sLen++;
}
string s;
for (i=sLen-1;i>=0;i--){
s+=op1[i]+'0';
}
return s;
}
int alignDecimal(string &S1,string &S2)
{
string s;
string s1=S1;
string s2=S2;
size_t s1Len=s1.size();
size_t s2Len=s2.size();
size_t s1DecLen=0;
size_t s2DecLen=0;
char *p=strchr((char*)s1.c_str(),'.');
if (p){
s1DecLen = s1Len - (p-s1.c_str())-1;
}
p=strchr((char*)s2.c_str(),'.');
if (p){
s2DecLen = s2Len - (p-s2.c_str())-1;
}
size_t MaxDecLen=max(s1DecLen,s2DecLen);
int i;
for (i=0;i<s1Len;i++){
if (s1[i]!='.'){
s+=s1[i];
}
}
for (i=0;i<MaxDecLen-s1DecLen;i++){
s+='0';
}
s1=s;
s.clear();
for (i=0;i<s2Len;i++){
if (s2[i]!='.'){
s+=s2[i];
}
}
for (i=0;i<MaxDecLen-s2DecLen;i++){
s+='0';
}
s2=s;
S1=s1;
S2=s2;
return MaxDecLen;
}
//大小数和演算12345678901234567890.123456789+12345678901234567890.98654321
string addDecimal(string s1,string s2)
{
int MaxDecLen = alignDecimal(s1,s2);
string s=add(s1,s2);
int s1Len=s.length();
if (MaxDecLen>0){
s.insert(s1Len-MaxDecLen,".");
}
return s;
}
int main(int argc, char* argv[])
{
string D="0.1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991";
int N;
cin>>N;
int i;
string s=D;
for (i=1;i<N;i++){
s=addDecimal(s,D);
}
cout<<s<<endl;
return 0;
}