
C言語で整数の約数をすべて表示するプログラムを作りました。
このプログラムの場合、自然数のみ対応し、負の値を入力しても計算されません。
この問いは、このプログラムでも正しいのでしょうか?
それとも負の値を入力しても約数が表示されるようにしなければならないのでしょうか?
その場合どのように直せばよろしいのでしょうか?
ご指導、よろしくお願いします。
#include <stdio.h>
int main()
{
int i;
int n;
printf("整数を入力してください = ");
scanf("%d",&n);
printf("%dの約数は ", n);
for( i=1; i<=n; ++i ){
if( n%i == 0 )
printf("%d ", i);
}
printf("です。\n");
return 0;
}
No.4
- 回答日時:
やかましいことをいうと 整数 n に対して
n=ab となる整数a、bが約数なので
約数にも正負が有ります。
またn=0の時は n=0・a(aは任意の整数)
なので0を含む全ての整数が約数です。
でも、実用としては n、a、b>0 で充分なので
仕様を確認すべきでしょう。
それと効率の話ですが
約数は√(n)まで調べれば充分。√(n)より大きい約数は
√(n)より小さい約数でnを割れば求まります。
計算量が激減します。

No.2
- 回答日時:
これは授業の演習課題か何かですかね?
>それとも負の値を入力しても約数が表示されるようにしなければならないのでしょうか?
課題を出した側に確認した方がいいです。
言葉通りに、入力した整数の約数全てを出力しろ、という課題なら、負の約数も対象になりますが、
意図的に出題側がそうしたいのではなく、説明足りてないだけの可能性が高いです。
また、入力する整数の範囲の下限、上限もどこまで必要か確認した方が良いでしょう。
int型が扱える下限値、上限値が出題者の上限を超える場合は別の型を使ったり、
工夫が必要になります。
>この問いは、このプログラムでも正しいのでしょうか?
上記の確認の結果次第ですが、入力された値のチェックをした方が良いでしょう。
例えば、開発環境にもよりますが、int型が扱える上限が2147483647の場合に、
nに2147483647を入力してしまうと、上記プログラムは異常になります。
for文ループの最後に、iがnと等しくなった後に、++iをして時に、
iがint型が扱える最大値を超えてしまうからです。
入力した数値自身が約数であることは自明なので、イコールを消して、
for(i=1;i<n;i++)として、
for文の終わった後に、printf("%d",n);を追加するとしても良いかもしれません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
プロが教える店舗&オフィスのセキュリティ対策術
中・小規模の店舗やオフィスのセキュリティセキュリティ対策について、プロにどう対策すべきか 何を注意すべきかを教えていただきました!
-
C言語で、「自然数nを入力し、nの約数をすべて求めて出力後、その個数と
C言語・C++・C#
-
積分で1/x^2 はどうなるのでしょうか?
数学
-
シグマ公式・・・C言語
C言語・C++・C#
-
4
どんなプログラムを書いても指定されたファイルが見つかりません。と出てきます。どうやったら解決しますか
C言語・C++・C#
-
5
任意の文字列のアルファベットのカウント
C言語・C++・C#
-
6
e^(x^2)の積分に関して
数学
-
7
C言語
C言語・C++・C#
-
8
C言語の入力した文字を反転させるプログラミングの仕方が分かりません。
Ruby
-
9
配列を用いない最大値の求め方
C言語・C++・C#
-
10
C言語について
C言語・C++・C#
-
11
正負を反転させて出力するプログラム
C言語・C++・C#
-
12
C言語での、年複利の計算方法が分かりません。
C言語・C++・C#
-
13
配列における数値の比較について
C言語・C++・C#
-
14
e^-2xの積分
数学
-
15
*をユーザーが入力した数字の数だけ表示するプログラムの作り方を教えてください
C言語・C++・C#
-
16
10個出力で改行したいのですが・・・
C言語・C++・C#
-
17
strcmp関数などでの複数の文字列の比較
C言語・C++・C#
-
18
単語数のカウントについて
C言語・C++・C#
-
19
∫1/(x^2+1)^2 の不定積分がわかりません
数学
-
20
lim[x→∞]log(1+x)/x これってどう解けばいいんでしょうか?
数学
このQ&Aを見た人がよく見るQ&A
人気Q&Aランキング
-
4
数字以外が入力されたらエラー...
-
5
正負を反転させて出力するプロ...
-
6
*をユーザーが入力した数字の数...
-
7
if文の条件にscanf関数を使うと…?
-
8
Excel2013VBAでフリーソフト「...
-
9
【再々投稿】VBAのプログラムで...
-
10
Userformの入力順序をタブオー...
-
11
C言語 逆ピラミッドの作り方
-
12
scanfが2回使えない・・・?;
-
13
ワードで文字を入力する時の変...
-
14
入力する数字のサイズ制限について
-
15
VB カウントダウンタイマーの作...
-
16
プログラミングの問題です 「金...
-
17
C言語scanf_sで何故か2回入力に...
-
18
コマンドプロンプトからのEOFの...
-
19
4桁の数字以外を入力したらエラ...
-
20
あるキーを押したら強制終了さ...
おすすめ情報
公式facebook
公式twitter