前提・実現したいこと
AIZU ONLINE JUDGEにおいてITP1_4_D最小値、最大値、合計値の問題を解いています。
vector<ll> a
についての最小値、最大値、合計値を出力することを実現したいです。
発生している問題・エラーメッセージ
以下のコードを以下の標準入力で実行したところ、変数largeがfor文の中では0になり最後の出力では9223372036854775808になりました。
c++
1#include <bits/stdc++.h> 2using namespace std; 3typedef unsigned long long ll; 4#define rep(i,n) for(ll i=0;i<n;i++) 5 6vector<ll> a; 7 8int main(){ 9 ll n; 10 ll temp=0; 11 cin >> n; 12 for(int i=0;i<n;i++){ 13 cin >> temp; 14 a.push_back(temp); 15 } 16 ll small=LONG_MAX,large=LONG_MIN,sum=0; 17 rep(i,n){ 18 // printf("a[%d]=%d\n",i,a[i]); 19 small = ((small>a[i])?a[i]:small); 20 large = ((large<a[i])?a[i]:large); 21 sum += a[i]; 22 printf("a[%d]=%d| %d %d %d\n",i,a[i],small,large,sum); 23 } 24 printf("%lld %lld %lld\n",small,large,sum); 25}
入力
3 10 20 5
出力
a[0]=10| 10 0 10 a[1]=20| 10 0 30 a[2]=5| 5 0 35 5 -9223372036854775808 35
試したこと
最小値、最大値の初期値を試しに小さくしてみて、largeの比較のところもif文に戻してみたりしました。
c++
1#include <bits/stdc++.h> 2using namespace std; 3typedef unsigned long long ll; 4#define rep(i,n) for(ll i=0;i<n;i++) 5 6vector<ll> a; 7 8int main(){ 9 ll n; 10 ll temp=0; 11 cin >> n; 12 for(int i=0;i<n;i++){ 13 cin >> temp; 14 a.push_back(temp); 15 } 16 ll small=+10000000,large=-10000000,sum=0; 17 rep(i,n){ 18 // printf("a[%d]=%d\n",i,a[i]); 19 small = ((small>a[i])?a[i]:small); 20 if(large < a[i]) {large=a[i];} 21 sum += a[i]; 22 printf("%d|| %d %d %d\n",i,small,large,sum); 23 } 24 printf("%lld %lld %lld\n",small,large,sum); 25}
出力
3 10 20 5 0|| 10 -10000000 10 1|| 10 -10000000 30 2|| 5 -10000000 35 5 -10000000 35
オーバーフロー関係かと考えてその他いろいろ調べましたが、比較の部分が機能していない理由が全くわかりませんでした。
何が原因なのか、またはどういった用語で検索すると良いかご教授してくださるとありがたいです。
補足情報(コンパイラのバージョン)
$ g++ -v Using built-in specs. COLLECT_GCC=g++ COLLECT_LTO_WRAPPER=/usr/local/Cellar/gcc/10.2.0_2/libexec/gcc/x86_64-apple-darwin20/10.2.0/lto-wrapper Target: x86_64-apple-darwin20 Configured with: ../configure --build=x86_64-apple-darwin20 --prefix=/usr/local/Cellar/gcc/10.2.0_2 --libdir=/usr/local/Cellar/gcc/10.2.0_2/lib/gcc/10 --disable-nls --enable-checking=release --enable-languages=c,c++,objc,obj-c++,fortran --program-suffix=-10 --with-gmp=/usr/local/opt/gmp --with-mpfr=/usr/local/opt/mpfr --with-mpc=/usr/local/opt/libmpc --with-isl=/usr/local/opt/isl --with-system-zlib --with-pkgversion='Homebrew GCC 10.2.0_2' --with-bugurl=https://github.com/Homebrew/homebrew-core/issues --disable-multilib --with-native-system-header-dir=/usr/include --with-sysroot=/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk SED=/usr/bin/sed Thread model: posix Supported LTO compression algorithms: zlib gcc version 10.2.0 (Homebrew GCC 10.2.0_2)
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/01/10 20:30 編集