#19136: c++ 如果是奇數的話不知道為什麼紅色字那部分的指令會被忽略 幫幫我


710517@lzsh.tc.edu.tw (林東駿)

學校 : 不指定學校
編號 : 85638
來源 : [106.105.93.39]
最後登入時間 :
2020-08-15 13:01:39
a010. 因數分解 | From: [106.105.93.39] | 發表日期 : 2019-09-03 19:58

#include <iostream>
using namespace std;
main(){
int a,b,c,d;
while (cin>>a){
b=2;
d=1;
while (b<=a){
c=0;
while (a%b==0){
c++;
a=a/b;
}
if (d==1){
if (c>1){
cout<<b<<"^"<<c;
}
else if (c==1){
cout<<b;
}
d=0;
}
else if (d==0){
if (c>1){
cout<<"*"<<b<<"^"<<c;
}
else if (c==1){
cout<<"*"<<b;
}
}
b++;
}
}
}

 
#19137: Re:c++ 如果是奇數的話不知道為什麼紅色字那部分的指令會被忽略 幫幫我


inversion (「我們所認識的可符香是個像天使的好女孩」之葉林 *Cries...)

學校 : 國立清華大學
編號 : 43537
來源 : [49.159.6.107]
最後登入時間 :
2022-05-28 19:29:12
a010. 因數分解 | From: [49.158.83.43] | 發表日期 : 2019-09-03 20:48

那段被忽略是因為本來就不符合 if 判斷式,也因此不會執行陳述式。(因為此時 c = 0)

 

由於 a 為一奇數,因此 a % b == 0 不成立(一開始 b == 2),因此不會動到 c 之值(每次迴圈回來會將 c 設為 0)。

而一開始的 d 之值又為 1 ,因此確實會進去 if (d == 1) 其下的陳述式。但因 c == 0 ,並不會進去裡面兩個 if 的任何一者。

然後,d 就被設為 0 了。

 

接著跳到 b++,因此 b 的值現為 3 。

回到迴圈的開頭,c 設為 0 。而此時 a % b == 0 為真,因此進去了迴圈裡。使得出來迴圈後,c = 1 、a = 1。

因為 d == 0 ,因此進到下面的 else if (d == 0) 裡。因此輸出了「*3」。

 

以上。希望跑一次過程後,可以幫助到您。

 
ZeroJudge Forum