- 締切済み
プログラミング
値 n を入力させ、1 から n までの総和を計算して、結果を表示させるプログラムを作成するのですが。入力としては、1~1000000までの数のみを受け付けるものなのですが。 実行例 ./a.out 1 からいくつまでの足し算をしますか? [1-1000000] 1 から 10 まで足した結果は 55 です。 #include<stdio.h> int main(void);
- みんなの回答 (4)
- 専門家の回答
みんなの回答
計算を整理するとこうなるかな。日本語表記は面倒だったので書いていませんが。。。 #include<stdio.h> int main(void){ long n; scanf("%ld", %n); printf("sum = %ld", (n+1)*n/2); return 0; }
- buriburi3
- ベストアンサー率44% (353/792)
どんな環境を使うのか知りませんが WindowsやLinuxの32bitOSの場合、通常int型で表現できるのは +2147483647~-2147483648までです。 >1 からいくつまでの足し算をしますか? [1-1000000] で1000000を選ぶと軽く桁あふれします。※39bit必要です。 64bit整数が使えない環境であれば39bit表現の方法を考える所までが問題なのか、単なる出題ミスなのかの確認が必要と思います。
- sakusaker7
- ベストアンサー率62% (800/1280)
Googleに計算してもらおうかと思ったけど、ソケットでごにょごにょするの面倒だった。 #include <stdio.h> #include <stdlib.h> #define INPUT_MAX 1000000 int main(int argc, char *argv[]) { char inputbuffer[16]; char cmdline[64]; char readbuffer[32]; int from = 1; int to; int answer; FILE *fp; fprintf(stderr, "%dからいくつまでの足し算をしますか? [%d-%d]\n", from, from, INPUT_MAX); fgets(inputbuffer, sizeof inputbuffer, stdin); to = strtol(inputbuffer, NULL, 10); if (to < from || to > INPUT_MAX) exit(1); snprintf(cmdline, sizeof cmdline, "/bin/echo '(%d+%d)*%d/2'|/bin/bc", from, to, to); fp = popen(cmdline, "r"); fgets(readbuffer, sizeof readbuffer, fp); pclose(fp); answer = strtol(readbuffer, NULL, 10); fprintf(stderr, "%dから%dまで足した結果は %dです。\n", from, to, answer); return 0; } 当然のオヤクソクとしてエラー処理はしてません。
- shimix
- ベストアンサー率54% (865/1590)
「自分でどこまで書けるのか」を補足として書いてください。
補足
#include <stdio.h> int main(void); int main(void) int n; printf("1からいくつまでの足し算をしますか?[1-100000]"); scanf("%d",$n); printf("1から %d まで足した結果は %d です。\n",); return(0); }