一開始的程式碼一長串 雖然在測試執行得AC,但送出時不行(TLE) 所以簡化後就AC了 凡事都要想要如何讓程式碼簡潔
#include <stdio.h>
int main()
{
int math ;
while ( scanf ( "%d" , &math ) != EOF){ // scanf( ) 如果輸入失敗會回傳EOF
int i = 0 , t = 0 ; // t 紀錄次方數
for ( i = 2 ; i <= math ; i ++ ){ // 找因子 不用擔心會不會除到 不是質數的因子 因為那些非質數 在i = 它們前早被自己的質數因子給除盡
while( !( math % i ) ){ //無除盡的情況下
t++ ;
math /= i ;
}
if ( t > 1 ){
if ( math != 1 ) // 如果還沒除完 ( math = 1 )
printf ( "%d^%d * " , i , t ) ;
else{
printf ( "%d^%d" , i , t ) ;
break ;
}
}
else if ( t == 1 ){
if ( math != 1 )
printf ( "%d * " , i ) ;
else{
printf ( "%d" , i ) ;
break ;
}
}
t = 0 ; // 重計算
}
printf ( "\n" ) ; // 一定要換行
}
return 0 ;
}
//有地翻寫錯了 修一下
一開始的程式碼一長串 雖然在測試執行得AC,但送出時不行(TLE) 所以簡化後就AC了 凡事都要想要如何讓程式碼簡潔
#include
int main()
{
int math ;
while ( scanf ( "%d" , &math ) != EOF){ // scanf( ) 如果輸入結束(讀到字尾)會回傳EOF
int i = 0 , t = 0 ; // t 紀錄次方數
for ( i = 2 ; i <= math ; i ++ ){ // 找因子 不用擔心會不會除到 不是質數的因子 因為那些非質數 在i = 它們前早被自己的質數因子給除盡
while( !( math % i ) ){ //無除盡的情況下
t++ ;
math /= i ;
}
if ( t > 1 ){
if ( math != 1 ) // 如果還沒除完 ( math = 1 )
printf ( "%d^%d * " , i , t ) ;
else{
printf ( "%d^%d" , i , t ) ;
break ;
}
}
else if ( t == 1 ){
if ( math != 1 )
printf ( "%d * " , i ) ;
else{
printf ( "%d" , i ) ;
break ;
}
}
t = 0 ; // 重計算
}
printf ( "\n" ) ; // 一定要換行
}
return 0 ;
}