C++实验14

来源:互联网 发布:申报数据库免费吗 编辑:程序博客网 时间:2024/05/22 12:26

一、分解质因子

#include<iostream>using namespace std;#include<math.h>void prime(int b[],int n){    int flag;    int m=0;    for(int i=2;i<n;i++)    {        flag=true;        for(int j=2;j<=sqrt(float(i));j++)            if(i%j==0)            {                flag=false;                break;            }        if(flag)            b[m++]=i;    }}void fun(int a[],int num, int *count){    int n=0;    int flag;    for(int i=2;i<=num;i++)    {        flag=false;        if(num%i==0)            for(int j=0;j<20;j++)            {                if(*(count+j)%i==0)                {                    a[n++]=i;                    flag=true;                    break;                }            }        if(flag)        {            num=num/i;            i=1;        }    }}void main(){    int b[30]={0},a[10]={0};    int n=100;    prime(b,n);    int *count=b;    int num;    cout<<"请输入要分解的整数:\n";    cin>>num;    fun(a,num,count);    cout<<num<<"=";    for(int i=0;a[i];i++)    {        if(a[i+1])        cout<<a[i]<<"*";        else            cout<<a[i]<<endl;    }}

按题目要求过于麻烦,故简化下:

#include<iostream>using namespace std;#include<math.h>bool primeornot(int n){    int flag=true;    for(int i=2;i<=sqrt(float(n));i++)        if(n%i==0)        {            flag=false;            break;        }    return flag;}void fun(int num,int *p){    int m=0;    for(int i=2;i<=num;i++)        if(num%i==0&&primeornot(i))        {            *(p+m++)=i;            num=num/i;            i=1;        }}void main(){    int num;    cin>>num;    int b[10]={0};    fun(num,b);    int i=0;    while(b[i])        cout<<b[i++]<<'\t';}

处理线性表

#include<iostream>using namespace std;#include<time.h>#include<stdlib.h>struct node{    int data;    node *link;};class chaintable{    node *head;     //存放链表表头    int n;          //存放链表长度public:    void initial(int m=10)    {        n=m;        srand(time(NULL));        head=0;        node *p;        for(int i=0;i<m;i++)        {            p=new node;            p->data=rand()%100;            if(!head)   //如果此时链表不存在,即刚开始创建            {                head=p;                head->link=0;            }            else        //链表已存在,数据链接到链表头            {                p->link=head;     //先后顺序不能反                head=p;            }        }    }    int length()    {    }    void print()    {        node *p=head;     //用p来指向链表开头,否则会修改链表head        while(p->link)   //判断此节点不是尾节点        {            cout<<p->data<<'\t';            p=p->link;        }        cout<<p->data<<endl;//尾节点未输出,补上    }    void del();    void addinend()    {        node *p= new node;        cout<<"请输入需增加的值:";        cin>>p->data;        node *p1=head;        while(p1->link)            p1=p1->link;        p1->link=p;        p->link=0;    }void coutn(){    cout<<n;}};void chaintable::del(){    node *p;    while(head->link)    {        p=head;              head=head->link;        delete p;    }    delete head;//尾节点未释放,补上}void main(){    chaintable a;    a.initial();    cout<<"已建立的链表为:\n";    a.print();    int n=true;    while(n)    {        cout<<"请选择:\n"<<"1 末尾增加链表元素\n"<<"2 输出链表\n"<<"0 结束\n";        cin>>n;        if(n==1)            a.addinend();        if(n==2)            a.print();    }    a.del();}