アプリ版:「スタンプのみでお礼する」機能のリリースについて

値 n を入力させ、1 から n までの総和を計算して、結果を表示させるプログラムを作成するのですが。入力としては、1~1000000までの数のみを受け付けるものなのですが。
実行例
./a.out
1 からいくつまでの足し算をしますか? [1-1000000] 1 から 10 まで足した結果は 55 です。

#include<stdio.h>

int main(void);

A 回答 (4件)

計算を整理するとこうなるかな。

日本語表記は面倒だったので書いていませんが。。。

#include<stdio.h>
int main(void){
long n;
scanf("%ld", %n);
printf("sum = %ld", (n+1)*n/2);
return 0;
}
    • good
    • 0

どんな環境を使うのか知りませんが


WindowsやLinuxの32bitOSの場合、通常int型で表現できるのは
+2147483647~-2147483648までです。
>1 からいくつまでの足し算をしますか? [1-1000000]
で1000000を選ぶと軽く桁あふれします。※39bit必要です。

64bit整数が使えない環境であれば39bit表現の方法を考える所までが問題なのか、単なる出題ミスなのかの確認が必要と思います。
    • good
    • 0

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;
}

当然のオヤクソクとしてエラー処理はしてません。
    • good
    • 0

「自分でどこまで書けるのか」を補足として書いてください。

この回答への補足

#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);
}

補足日時:2008/05/12 09:27
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!