高速ダブルスキャンが必要な問題の解決策を最適化しようとしています。標準入力からdoubleを読み取る関数を実装しようとしましたが、失敗しました。誰かがこれを効率的に実装する簡単なコードを教えてもらえますか?前もって感謝します。
これが私の試みであることに注意してください。これにはいくつかの問題があるようです。
#include <stdio.h>
#include <stdlib.h>
inline double getDouble(FILE *f = stdin) {
char tmp[20], ch;
bool seen = false;
double sign = 1.0;
short index = 0;
while((ch = getc(stdin)) != EOF) {
if(ch == '-') {
sign = -1.0;
continue;
}
if(ch == ' ' || ch == '\n') {
if(seen) break;
} else {
seen = true;
tmp[index++] = ch;
}
}
return sign * (double)atof(tmp);
}
int main() {
int n;
scanf("%d", &n);
double *d = new double[n];
for(int i=0; i<n; ++i) {
d[i] = getDouble();
}
for(int i=0; i<n; ++i) {
printf("%.5lf\n", d[i]);
}
return 0;
}
入力:
16
-2 -1 -4 -5
1 1 1 1
1.233 -435 -2.44
3
2 3 42 4