1000以内的数

/*我们要求找出具有下列性质数的个数(包含输入的自然数n)。先输入一个自然数n(n<=1000),然后对此自然数按照如下方法进行处理: 1.不作任何处理;  2.在它的左边加上一个自然数,但该自然数不能超过原数最高位数字的一半; 3. 加上数后,继续按此规则进行处理,直到不能再加自然数为止.  


【输入】  第一行一个数t,表示有t组数据 之后每组数据占一行,每行一个数n  
【输出】  每组数据占一行,一个数,表示满足条件的数的个数  
【输入范例】1 6  
【输出范例】6 */

#include<iostream>  
#include <conio.h>
using namespace std;




int getwei(int x)    //取一共多少位
{
int i=0;
while(x!=0)
{
x=x/10;
i+=1;
}
return i;

}


int getfirst(int x)   //取数字的第一位
{
while(x>=10)
{
x=x/10;
}
return x;
}






void function(int x)
{ int i=1;          //因为switch有3个分支分别为1位数,2位数和3位数。为了区分所以定义了7个变量
int j=0;
int p=1;
int q=0;
int m=1;
int n=0;
int h=1;


int num=1; //有几个满足条件的数字
int two;   //2位数的首数字
int three;  //3位数的首数字
int wei=getwei(x); //1,2,3

switch(wei)
{
   case 1:

for(i;i<=x/2;i++)
{
if(x>=4)
{
cout<<10*i+x<<endl;     
num+=1;
for(j=1;j<=i/2;j++)
{
    cout<<100*j+10*i+x<<endl;   
num+=1;

for(h=1;h<=j/2;h++)
{
cout<<1000*h+100*j+10*i+x<<endl;    
num+=1;
}
}


}
else
{
cout<<100*j+10*i+x<<endl;         
num+=1;
}
}





   break;
   case 2:
   two=getfirst(x);
   for(m;m<=two/2;m++)
   {
   if(two>=4)
   {
       cout<<100*m+x<<endl;     
     num+=1;
   for(n=1;n<=m/2;n++)
{
     cout<<1000*n+100*m+x<<endl;      
num+=1;
for(h=1;h<=n/2;h++)
{
cout<<10000*h+1000*n+100*m+x<<endl;   
num+=1;
}


   }
   }
   else
   {
   cout<<1000*n+100*m+x<<endl;      
   num+=1;
   }
}
   break;
   case 3:
  three=getfirst(x);
   for(p;p<=three/2;p++)
   {
   if(three>=4)
   {
       cout<<1000*p+x<<endl;     
   num+=1;
   for(q=1;q<=p/2;q++)
 
   {
    cout<<10000*q+1000*p+x<<endl;      
num+=1;
for(h=1;h<=q/2;h++)
{
cout<<100000*h+10000*q+1000*p+x<<endl;        
num+=1;
}
   }
   }
   else
   {
   cout<<10000*q+1000*p+x<<endl;      
   num+=1;
   }
}
   break;
}




cout<<"一共有多少个数:"<<num<<endl;    


}


int main()
{
int num=1000;
bool first=true;
cout<<"SET NUM"<<endl;
while(num>=1000||num==1)
{ if(first)
{
cin>>num;
first=false;
}
else
{
cout<<"ERROR NUM"<<endl;
cin>>num;
}

}




function(num);


getch();

    cout<<"满足条件的数为:"<<num<<endl;


}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值