プロが教える店舗&オフィスのセキュリティ対策術

C言語の問題です
1!からn!までの合計値を求めるnの範囲は(1以上10以下)
5を入力した場合153
このような問題で階乗を求めるプログラムはできたのですが総和を求めることができないので修正方法を教えてほしいです。


#include

int main
{
int n,sum=1,i;
printf("1以上10以下の整数を入力してください\n")
scanf("%d,&n);

if(n<1II n>10)
{
return 1;
}
i=1;
while(i<=n)
{
sum *= i;
i++;

printf("%d\n",sum)
return 0;
}
実行結果は5を入力したら120になってしまいます

A 回答 (2件)

    • good
    • 0
この回答へのお礼

助かりました

ありがとうございます

お礼日時:2023/03/05 03:54

この問題で求めるのは、1!からn!までの合計値です。

つまり、1! + 2! + 3! + ... + n!を求める必要があります。

修正するためには、以下のように変更することができます。

#include <stdio.h>

int main()
{
int n, sum = 0, i, fact = 1;
printf("1以上10以下の整数を入力してください\n");
scanf("%d", &n);

if(n < 1 || n > 10)
{
return 1;
}

for(i = 1; i <= n; i++)
{
fact *= i;
sum += fact;
}

printf("%d\n", sum);
return 0;
}

この修正したプログラムでは、forループを使って1からnまでの各数の階乗を求め、それらを合計しています。初期値としてsumを0に設定しています。また、各数の階乗は変数factに保存しています。最初にfactを1に設定し、ループ内でiを掛け合わせることで、各数の階乗を計算しています。

また、if文の条件式で、論理和(||)を使うべきところで、論理積(&&)を使ってしまっていました。修正したプログラムでは、条件式を正しく修正しています。

この修正後のプログラムを実行すると、5を入力した場合に153が出力されます。
    • good
    • 1
この回答へのお礼

助かりました

解答ありがとうございます!解説もわかりやすくて理解することができました!

お礼日時:2023/03/05 03:53

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