[ZeroJudge] a010 因數分解

2009/01/22

這題也是有點有趣 , 不過我自己的做法比較笨一點 ,
就是先開個可以容的下題目的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; }