46.建立一个类NUM,求指定数据范围内的所有合数(非质数)。提示:合数定义是“一个数,除了1和它本身,还有其它约数,这样的数叫合数”。
具体要求如下:
- 私有数据成员
- int *data:动态存放在指定范围内求出的所有合数。
- int span1,span2:存放指定范围的下限和上限。
- int num:存放 span1 与 span2 之间的合数个数。
- 公有成员函数
- NUM(int n1, int n2) :构造函数,用参数n1和n2初始化span1和span2,同时初始化 num。
- int isComposite (int x ):判断x是否为合数。若是合数,返回1,否则,返回0。
- void process( ) :求指定范围内的所有合数,把它们依次存放在数组data 中,并将求出的合数个数赋给num。
- void print( ):输出求出的素数个数及所有合数,每行输出 8 个合数。
~NUM( ):释放动态分配的存储空间。
- 在主函数中完成对该类的测试。定义一个NUM类对象test,指定查找范围为100~200,即求100
至200之间的所有合数。通过test调用成员函数完成求合数及输出合数的工作。
#include<iostream>
using namespace std;
class NUM{
int *data,span1,span2,num;
public:
NUM(int n1,int n2){
//data = new int[100];
span1 = n1;
span2 = n2;
num = 0;
}
int isComposite(int x){
for(int i=2;i<x;i++){
if(x%i==0){
return 1;
}
}
return 0;
}
void process(){
int n = 0;
for(int i=span1;i<=span2;i++){
if(isComposite(i)){
n++;
}
}
data = new int[n];
for(int i=span1;i<=span2;i++){
if(isComposite(i)){
data[num++]=i;
}
}
}
void print(){
cout<<"num:"<<num<<endl;
for(int i=0;i<num;i++){
cout<<data[i]<<" ";
if((i+1)%8==0){
cout<<endl;
}
}
}
~NUM(){
if(data)delete[]data;
}
};
int main(){
NUM test(100,200);
test.process();
test.print();
system("pause");
return 0;
}