[ZeroJudge] a010 因數分解

這題也是有點有趣 , 不過我自己的做法比較笨一點 ,
就是先開個可以容的下題目的array[1000000] , 然後
去存哪些因數有算過就++ , 最後再去總結算 !

要注意的地方:
1.我用了recursive的方法去實做
2.用search function 去找有x個格子的數字不是0 (x-1就是乘號的數目)

大概就是這樣! 如果有什麼比較好的方法請提供一下:D


#include <iostream>
#define MAX 1000000
using namespace std;
int arr[MAX]={0};
void div(int input){
int i;
int sinput = input;
for(i=2;i<=sinput;i++){
if(sinput%i==0){
arr[i]+=1;
sinput/=i;
break;
}
}
if(input!=sinput){
div(sinput);
return ;
}
}
void reset(){
int i;
for(i=0;i<MAX;i++){
arr[i]=0;
}
}
int search(){
int i,count=0;
for(i=2;i<MAX;i++){
if(arr[i]!=0) count++;
}
return count;
}
int main(){

int h,i,k,scount=0;

while(cin >> i){
div(i);
scount = search()-1;
for(k=2;k<MAX;k++){
if(arr[k]!=0){
if(arr[k]==1){
cout << k ;
}else{
cout << k << "^" << arr[k] ;
}
if(scount!=0){
cout << " * " ;
scount--;
}
}
}
cout << endl;
reset();
}
system("pause");
return 0;
}

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

您的留言將使用 WordPress.com 帳號。 登出 / 變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 / 變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 / 變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 / 變更 )

連結到 %s