ID非公開

2020/11/21 0:10

44回答

大学でプログラミング言語を勉強しているのですが、1+2+3+…+nを計算して表示するプログラムを作成するという課題が出ています。

画像

C言語関連 | プログラミング91閲覧xmlns="http://www.w3.org/2000/svg">100

ベストアンサー

0

その他の回答(3件)

0

yay********さんもおっしゃっているように、『大きな数字』とはなんでしょうか。(一応、彼/彼女とのやり取りで書かれているけど) そういうのは『主観』です。 次からは具体的な数字等を提示してくださいね。(そうしないとわからないから) 回答者は常に質問者と同じ環境にあるわけじゃないですから。 これぐらいにして。 ---------------------------------------------- 今回の場合は、『型を意識する必要』があります。 六桁の数字… 220010とかですかね。 まず、この場合はint型等の『範囲』を確認してください。 (環境や言語等によって変わると思いますが) 『C言語 型 範囲』で調べると、 https://marycore.jp/prog/c-lang/data-type-ranges-and-bit-byte-sizes/ がヒットしました。 これによると、 int: -2147483648 〜 2147483647 らしいです。 総和が 2147483647 を超えている ( S>2147483647 ) だとオーバーフローを引き起こします。 2Lのペットボトルかなんかに、3Lの液体を一気に注ぐとどうなるでしょうか。普通に考えて『溢れ』ますね。 この状態です。 では、2147483647 を超える場合はどうすればいいでしょうか。 64bitの環境ならlongが使えそうです。 それでも足りないなら long long とするのです。 それでも足りないなら、工夫するか、『多倍長整数』だったかな…。以前教えてもらったものがあるのですが、そういう特殊なアレになるようです。 つまり、『型を意識する』です。

0

加算に使っている m はint型なので2147483647が最大です。 後からlong intにいれても手遅れです。 多くのコンパイラでは int と long int の数値範囲は同じです 正の整数で一番大きな値が使えるのは unsigned long long int です。

ID非公開

質問者

2020/11/21 1:46

はじめからmを別の型に入れればいいんですか?

1

大きな数字と言われても具体例をあげてもらわないと感覚は人それぞれなのでよくわかりませんよ。 printf("%id") として倍精度整数を出力したいようですがintは倍精度整数ではありません。 なので出力できないだけじゃないです? 中の値が大きくなっても自動で変数の型は変わりません(決められた大きさのメモリ容量しか確保していないから)。 intの範囲:-2147483647 ~2147483647 倍精度整数使いたいのなら long long long unsigned long long みたいなの使いましょう。

1人がナイス!しています

ID非公開

質問者

2020/11/21 1:11

idではなくldと入力しています。6桁以上の数だと上手く作動しません