一、分解质因子
#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();
}