質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

1回答

927閲覧

比較演算子が機能しない

monokemonoke

総合スコア1

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2021/01/10 20:02

編集2021/01/10 20:18

前提・実現したいこと

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)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

C++

1typedef unsigned long long ll;

これだとllunsigned long long型となります。
この型の変数にマイナスの値を入れると、どうなるでしょうか。

投稿2021/01/10 20:26

actorbug

総合スコア2212

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

monokemonoke

2021/01/10 20:30 編集

unsigned long longと書いていたのを見落としていました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問