C++完成对数据的处理(水仙花数,自守数,完全数,阶乘和数,亲密数,孪生素数)

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();
	 }
  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值