- ベストアンサー
C言語の課題:4以上の数のうち、5で割り切れ、2の余りを引き、1,3,4の余りは無視した合計を求める
- 大学の課題で、C言語を使用して特定の条件を満たす数の合計を求める必要があります。
- 条件は、4以上の数のうち、5で割り切れ、2の余りを引き、1,3,4の余りは無視し、それらを合計するというものです。
- しかし、他のサイトの情報を参考にしても解けず、自力でプログラムを作成することができませんでした。ソースを提供していただけると助かります。
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
みなさんはdilemmanさんの為を思って答えを教えないようですが、 私はそんなに良い人ではないのでコード貼ります。 #include <stdio.h> int main(int argc, const char *argv[]) { int num; int ans = 0; printf("INput Upper Limit: "); scanf("%d", &num); int i; for(i=5; i<num; i++){ if(i%5==0) ans+=i; if(i%5==2) ans-=i; } printf("Anser is: %d\n", ans); return 0; } エラーチェックはしていないので、工夫してみてください。 ちなみに18を入力したときの答えは-6で合ってますか? $ ./oshiete INput Upper Limit: 18 Anser is: -6 自分で2日かけて書いてみたコードなども掲載すると、もう少し他の人も親切に 教えてくれるのではないでしょうか。
その他の回答 (6)
- akayoroshi
- ベストアンサー率50% (46/91)
#6の回答、間違えました。 正しくは、 for (/* 2から、2乗しても nNum を超えない範囲で */) { です。 ただし、この場合、nNumがINT_MAXの平方根を切り捨てた値の2乗より大きいと(int型が符号付32bitのとき、2,147,395,600より大きいと)2乗の演算でオーバーフローが生じるため正しい答えは得られなくなります。
- akayoroshi
- ベストアンサー率50% (46/91)
『平方根は使ってはならない』というのは、素数か否かを判定するのに、入力された値の平方根までの数で割り切れなければ素数という判定をさせようということでしょう。 ♯4の回答のプログラムのforを for (/* 2から、2乗しても(nNum*nNum)を超えない範囲で */) { にすると評価されるかもしれません。 ただし、この場合、nNumがINT_MAXの平方根より大きいと正しい答えは得られなくなります。
- jjk65536
- ベストアンサー率59% (66/111)
あ、素数忘れてましたね。 No4様の回答も大変親切なので、組み合わせてみてください。 コンパイラは何をお使いですか? gccなら#include <stdbool.h>でbool型が使えます。
- FAY
- ベストアンサー率49% (95/193)
んー、素数判定が抜けてるかな。 一例です。 /* 任意の数値 nNum が素数か否かを判定する */ bool IsPrimeNumber(int nNum) { for (/* 2からnNum/2まで */) { if (/* 割ったあまりが0なら */) { /* nNumは素数ではない */ return false; } } /* nNumは素数 */ return true; } bool型が使えない場合はint型にしてもいいかな。
補足
>bool型がつかえない場合はint型にしてみてもいいかな int型にする場合は上記のソースをどのように変えればよいのでしょうか
- D-Matsu
- ベストアンサー率45% (1080/2394)
最初から自力で作るの諦めてませんか? #最初から「ほかのサイト」とかを参考にしようとしてないか、って意味ですよ #1でも言われてますが、この程度なら「手でやるときにどうするか」を考えてそれをプログラム上の手順に直すだけであり、授業をちゃんと受けていればその内容だけで確実にできるレベルの問題です。
- Tacosan
- ベストアンサー率23% (3656/15482)
「この計算をしろ」と言われたら, あなたはどうしますか?
お礼
回答ありがとうございます