C++完成对数据的处理(水仙花数,自守数,完全数,阶乘和数,亲密数,孪生素数)
由系统生成一个大于10000小于50000的随机数,完成对该随机数数据的处理
菜单函数:
#include<iostream>
using namespace std;
void menu()
{ cout<<"→1:输出完数:"<<endl;
cout<<"→2:输出亲密数:"<<endl;
cout<<"→3:输出水仙花数:"<<endl;
cout<<"→4:输出阶乘和数:"<<endl;
cout<<"→5:输出自守数:"<<endl;
cout<<"→6:输出孪生素数:"<<endl;
cout<<"→0:退出:"<<endl;}
水仙花数:
水仙花数是指一个 3 位数,它的每个位上的数字的 3次幂之和等于它本身
#include<iostream>
using namespace std;
void fun3(int k)
{ int i,j=0;int a[3],*p;p=new int [20];
cout<<"水仙花数:";
for(i=100;i<k;i++)
{a[0]=i%10;
a[1]=(i/10)%10;
a[2]=(i/100)%10;
if(a[0]*a[0]*a[0]+a[1]*a[1]*a[1]+a[2]*a[2]*a[2]==i)
{p[j]=i;j++;}}
for(i=0;i<j;i++)
{if(i%5==0)
cout<<endl;
cout<<p[i]<<" ";}
delete [20]p;}
自守数:
自守数是指一个数的平方的尾数等于该数自身的自然数。
#include<iostream>
using namespace std;
long pin(int n)
{ int x,t,sum=0;
x=n*n;
while(n)
{ sum++;
n=n/10;}
switch(sum)
{ case 1:t=x%10;break;
case 2:t=x%10;x=x/10;t=t+(x%10)*10;break;
case 3:t=x%10;x=x/10;t=t+(x%10)*10;x=x/10;t=t+(x%10)*100;break;
case 4:t=x%10;x=x/10;t=t+(x%10)*10;x=x/10;t=t+(x%10)*100;x=x/10;t=t+(x%10)*1000;break;
case 5:t=x%10;x=x/10;t=t+(x%10)*10;x=x/10;t=t+(x%10)*100;x=x/10;t=t+(x%10)*1000;x=x/10;t=t+(x%10)*10000;break;
defualt:cout<<"已超出数据处理极限:"<<endl;break;}
return t;}
void fun5(int x)
{ int i,t,j=0;
cout<<"自守数:";
for(i=1;i<x;i++)
{
if(i==pin(i))
{if(j%5==0)
cout<<endl;cout<<i<<"\t";j++;}}}
完全数:
完全数(Perfect number),又称完美数或完备数,是一些特殊的自然数。它所有的真因子(即除了自身以外的约数)的和(即因子函数),恰好等于它本身。
#include<iostream>
using namespace std;
void fun1(int k)
{ int i;int *p1=new int [500];int *p2=new int [500];int n,j,sum,l,m=0;
cout<<"完全数:";
for(i=3;i<k;i++)
{ n=0;sum=0;
for(j=1;j<i;j++)
{if(i%j==0)
{p1[n]=j;n++;}}
for(l=0;l<n;l++)
sum+=p1[l];
if(i==sum)
{p2[m]=i;m++;}}
for(j=0;j<m;j++)
{if(j%5==0)cout<<endl;cout<<p2[j]<<" ";}
delete [500]p1;delete [500]p2;}
亲密数:
如果a的所有正因子和等于b,b的所有正因子和等于a,因子包括1但不包括本身,且a不等于b,则称a,b为亲密数对。
#include<iostream>
using namespace std;
int ying(int y)
{ int sum=0,i;
for(i=1;i<y;i++)
{if(y%i==0)
sum+=i;}
return sum;}
void fun2(int x)
{ int sum,i,j=0;
cout<<"亲密数:";
for(i=2;i<x;i++)
{sum=ying(i);
if(i==ying(sum)&&i<sum)
{if(j%5==0)cout<<endl;cout<<i<<"和"<<sum<<"\t";j++;}}}
孪生素数:
#include<iostream>
using namespace std;
#include<iostream>
using namespace std;
bool su(int x)
{ int i;bool f=1;
for(i=2;i<x;i++)
if(x%i==0)
{f=0;break;}
return f;}
void fun6(int x)
{ int *p;int i,n=0,j=0;bool f;
p=new int[50000];
cout<<"孪生素数:";
for(i=3;i<x;i++)
{f=su(i);
if(f)
{p[n]=i;n++;}}
for(i=0;i<n;i++)
{if(abs(p[i]-p[i+1])==2)
{if(j%5==0)cout<<endl;cout<<p[i]<<"和"<<p[i+1]<<"\t";j++,j++;}}
delete [50000]p;
}
阶乘和数:
它们的规律符合公式:abcd=aa!+bb!+cc!+dd! 。即:该数据的值等于各个位上数字乘以其阶乘数之和。
#include<iostream>
using namespace std;
int mul(int x)
{ long s;
if(x==1||x==0)
s=1;
else
s=x*mul(x-1);
return s;}
void fun4(int y)
{ int t,sum,x,i,j=0;
cout<<"阶乘和数:";
for(i=1;i<y;i++)
{ x=i;sum=0;
while(x>0)
{t=x%10;
sum+=mul(t);
x=x/10;}
if(i==sum)
{if(j%5==0)cout<<endl;cout<<i<<"\t";j++;}}}
主函数:
#include<iostream>
#include<cstdlib>
#include<ctime>
void menu();
void fun1(int k);
void fun2(int x);
void fun3(int k);
void fun4(int y);
void fun5(int x);
void fun6(int x);
using namespace std;
void main()
{ int n;int x;
system("color f3");
srand(time(0));
n=rand()%50000;
cout<<"由系统随机产生的数n为:"<<n<<endl;
cout<<"**********************************"<<endl;
menu();
cout<<"**********************************"<<endl;
cout<<"请输入你要选择的功能:";cin>>x;
while(1)
{ switch(x)
{ case 1:fun1(n);break;
case 2:fun2(n);break;
case 3:fun3(n);break;
case 4:fun4(n);break;
case 5:fun5(n);break;
case 6:fun6(n);break;
default:cout<<"功能选择错误:"<<endl;exit(1);}
cout<<endl;cout<<"请输入你要选择的功能:";cin>>x;
if(x==0) {cout<<"已退出本系统!"<<endl;break;}}
cin.get();
cin.get();
}