結果
| 問題 |
No.81 すべて足すだけの簡単なお仕事です。
|
| コンテスト | |
| ユーザー |
myanta
|
| 提出日時 | 2017-06-28 02:10:07 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
| 結果 |
AC
|
| 実行時間 | 1 ms / 5,000 ms |
| コード長 | 1,356 bytes |
| コンパイル時間 | 379 ms |
| コンパイル使用メモリ | 24,576 KB |
| 実行使用メモリ | 5,376 KB |
| 最終ジャッジ日時 | 2024-07-22 16:40:02 |
| 合計ジャッジ時間 | 1,149 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 30 |
コンパイルメッセージ
main.cpp: In function ‘int main()’:
main.cpp:119:30: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
119 | scanf("%24[-0-9.]\n", buf);
| ~~~~~^~~~~~~~~~~~~~~~~~~~~
ソースコード
#include<cstdio>
using ll=long long;
class mbn
{
ll a, b;
int s;
public:
mbn()
{
a=b=0LL;
s=0;
}
void set(const char *p)
{
s=0;
a=b=0;
if(*p=='-')
{
s=1;
p++;
}
for(;*p;p++)
{
if(*p=='.')
{
p++;
break;
}
a=a*10+(*p-'0');
}
for(int i=0;i<10;i++)
{
if(*p=='\0')
{
b*=10;
}
else
{
b=b*10+(*p-'0');
p++;
}
}
}
const mbn operator+(const mbn rhs)
{
mbn r;
if(s==rhs.s)
{
int c=0;
r.s=s;
r.b=b+rhs.b;
if(r.b>=10000000000LL)
{
r.b-=10000000000LL;
c=1;
}
r.a=a+rhs.a+c;
}
else
{
if(abs_cmp(rhs)>=0)
{
int c=0;
r.s=s;
r.b=b-rhs.b;
if(r.b<0)
{
r.b+=10000000000LL;
c=1;
}
r.a=a-rhs.a-c;
}
else
{
int c=0;
r.s=rhs.s;
r.b=rhs.b-b;
if(r.b<0)
{
r.b+=10000000000LL;
c=1;
}
r.a=rhs.a-a-c;
}
}
return r;
}
int abs_cmp(const mbn rhs)
{
if(a>rhs.a) return 1;
if(a<rhs.a) return -1;
if(b>rhs.b) return 1;
if(b<rhs.b) return -1;
return 0;
}
void print(void)
{
printf("%s%lld.%010lld\n", s?"-":"", a, b);
}
};
int main(void)
{
int n;
while(scanf("%d\n", &n)==1)
{
mbn ans;
for(int i=0;i<n;i++)
{
char buf[24+2]={0};
mbn x;
scanf("%24[-0-9.]\n", buf);
x.set(buf);
ans=ans+x;
}
ans.print();
}
}
myanta