最後に } がないのでコンパイルエラーになりますが、
まあ、これはコピペを失敗しただけでしょう。
かずま さんが書きました: ↑5年前
そのメッセージが出た時の「入力データ」を書いてください。
なぜ、こんな簡単なお願いに応えてくれないのでしょうか?
仮に 12 を入力したとします。
期待する出力は suuzi = 2 x 2 x 3 ですよね。
違いますか?
コードを追っていきましょう。
プログラムは main から始まります。
その時に、グローバル変数はすでに初期化されています。
int kaisuu = 0; のように初期値を明示的に書いていると
その値になります。
初期値の指定がない場合、すべて 0 に初期化されます。
cin >> suuzi; で、キーボード入力の数値が suuzi に入ります。
これが 12 だったとしましょう。
for (a = 0; a < 8; a++) で a は 0 になり、これは 8 より小さいので
for文の中に入り、for (i = 0; suuzi % i != 0; i++) に進みます。
i は 0 です。
suuzi % i は 12 を 1 で割った余りなのでその値は 0 です。
その値が 0 と等しいのでこの for文の中には入りません。
{ suuzi = suuzi / i; sosuu[a] = 1; } は全く実行されません。
suuzi++; で suuzi は 13 になります。
sosuu[a]++; で sosuu[0] は 1 になります。
int c; でローカル変数 c を宣言すると、
グローバル変数の c は参照できなくなります。
for (c = 1; c <= suuzi; c++) で c は 0 になり、その値は suuzi の
13 以下なので、for文の中に入ります。
if (suuzi % c == 0) で 13 を 1 で割った余りは 0 なので、if文の中に入り、
kaisuu++; で kaisuu は 1 になります。
yakusuu[kaisuu] = c; で kaisuu[1] が 1 になります。
for文の c++ に戻り、c は 2 になります。
これは suuzi の 13 以下なので、forループを継続します。
if (suuzi % c == 0) で 13 を 2 で割った余りは 1 なので、
if文の中には入りません。
{ kaisuu++; yakusuu[kaisuu] = c; } は実行されません。
for文の c++ に戻り、c は 3 になります。
これは suuzi の 13 以下なので、forループを継続します。
if (suuzi % c == 0) で 13 を 3 で割った余りは 1 なので、
if文の中には入りません。
{ kaisuu++; yakusuu[kaisuu] = c; } は実行されません。
for文の c++ に戻り、c は 4 になります。
これは suuzi の 13 以下なので、forループを継続します。
if (suuzi % c == 0) で 13 を 4 で割った余りは 1 なので、
if文の中には入りません。
{ kaisuu++; yakusuu[kaisuu] = c; } は実行されません。
for文の c++ に戻り、c は 5 になります。
これは suuzi の 13 以下なので、forループを継続します。
if (suuzi % c == 0) で 13 を 5 で割った余りは 3 なので、
if文の中には入りません。
{ kaisuu++; yakusuu[kaisuu] = c; } は実行されません。
for文の c++ に戻り、c は 6 になります。
これは suuzi の 13 以下なので、forループを継続します。
if (suuzi % c == 0) で 13 を 6 で割った余りは 1 なので、
if文の中には入りません。
{ kaisuu++; yakusuu[kaisuu] = c; } は実行されません。
このように for (c = 1; c <= suuzi; c++) のループを何度も回り、
c が 13 になった時、
if (suuzi % c == 0) で 13 を 13 で割った余りが 0 なので、
if文の中には入ります。
kaisuu++; で kaisuu は 2 になります。
yakusuu[kaisuu] = c; で yakusuu[2] は 13 になります。
for文の c++ に戻り、c は 14 になります。
これは suuzi の 13 以下ではないので、for文の中には入りません。
while (1) に進みます。
for (int d = 0; d <= kaisuu; d++) で d は 0。kaisuu の 2 以下なので
for文の中に入ります。
if (suuzi / yakusuu[d] == 0 では、suuzi が 12、yakusuu[0] が 0
なので、割り算の結果を求めることができず例外が発生し、
プログラムが異常終了します。
yakusuu[1] は 1、yaksuu[2] は 13 ですが、
yakusuu[0]、yakusuu[3]~yakusuu[255] はすべて 0 のままです。
ところで、#2 のプログラムは参考なりませんでしたか?