整数求因数算法
對一個整數求因數的計算在編程題中比較常見,還有在求出因數后對因數構成的數組再進行操作。例如,求一個整數的所有因數的求和結果,若是求和結果等于該整數,稱這個整數為“完全數”,現在需要對輸入的一個整數進行判斷。首先是確定整數應該測試因數的范圍,最直觀的是將整數num依次循環除以2~num-1所有數,挑出余數為0的數。事實上,這樣測試使循環次數增加了,例如32=4*8,只需要測試出4,就已經知道8也滿足條件了。所以,在循環進行測試的時候,測試到num的平方根就可以了。
編寫一段程序測試完全數:
#include<iostream>
#include<cmath>
using namespace std;int perfectNumberCheck(int);
int main(){int num;cin >> num;if(perfectNumberCheck(num)){cout << num << " is a perfect number!"<< endl;}else cout << num << " is not a perfect number!"<< endl;return 0;
}
int perfectNumberCheck(int num){int count=0;int b[num]={0};int a=sqrt(num);for(int i=2;i<=a;i++){if(num%i==0){b[count]=i;count++;}}int sum=0;for(int i=0;i<count;i++){sum+=(b[i]+num/b[i]);}if(sum+1==num) return 1;else return 0;
}
/*
int perfectNumberCheck(int num){int count=0;int b[num]={0};for(int i=2;i*i<=num;i++){ //直接使用i*i,可以避免使用開平方運算if(num%i==0){b[count]=i;count++;}}int sum=0;for(int i=0;i<count;i++){sum+=(b[i]+num/b[i]);}if(sum+1==num) return 1;else return 0;
}
*/ 
測試結果:
在最后一次測試過程中,將for循環的起點改為了0,此時相當于num%0運算,因此出現了“浮點數例外(核心已轉儲)”的問題。
總結
                            
                        - 上一篇: 元气骑士元素使如何获得?
 - 下一篇: 求一个好听的兽药店名字!