結果
| 問題 |
No.81 すべて足すだけの簡単なお仕事です。
|
| コンテスト | |
| ユーザー |
tubo28
|
| 提出日時 | 2016-12-27 00:55:33 |
| 言語 | D (dmd 2.109.1) |
| 結果 |
AC
|
| 実行時間 | 2 ms / 5,000 ms |
| コード長 | 1,470 bytes |
| コンパイル時間 | 760 ms |
| コンパイル使用メモリ | 105,796 KB |
| 実行使用メモリ | 5,376 KB |
| 最終ジャッジ日時 | 2024-06-12 06:07:50 |
| 合計ジャッジ時間 | 1,732 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 30 |
ソースコード
import std.string, std.stdio, std.algorithm, std.container, std.typecons, std.conv;
void main(){
int n;
scanf("%d", &n);
readln;
int[] ans = new int[32];
foreach(i; 0..n){
string s = readln.chomp;
auto ss = s.split('.');
if(ss.length == 1){
ss ~= "0";
}
// writeln(ss);
int sign = ss[0][0] == '-' ? -1 : +1;
ss[0] = ss[0].replace("-", "0");
while(ss[0].length < 16) ss[0] = "0" ~ ss[0];
while(ss[1].length < 16) ss[1] ~= "0";
string x = ss[0] ~ ss[1];
foreach(j; 0..32){
ans[j] += sign * (x[j] - '0');
}
}
foreach_reverse(i; 1..32){
while(ans[i] >= 10){
ans[i] -= 10;
ans[i-1] += 1;
}
while(ans[i] < 0){
ans[i] += 10;
ans[i-1] -= 1;
}
}
int sign = ans[0] < 0 ? -1 : +1;
foreach(i; 0..32) ans[i] *= sign;
foreach_reverse(i; 1..32){
while(ans[i] >= 10){
ans[i] -= 10;
ans[i-1] += 1;
}
while(ans[i] < 0){
ans[i] += 10;
ans[i-1] -= 1;
}
}
// writeln(ans);
ans = ans[0..26];
// writeln(ans);
auto pos = ans[0..16], neg = ans[16..$];
while(pos.length > 1 && pos[0] == 0){
pos = pos[1..$];
}
if(sign < 0) write("-");
write(pos.map!(to!string).join);
write(".");
writeln(neg.map!(to!string).join);
}
tubo28