用c语言编写一个程序

用c语言编写一个程序:对于一个自然数n(n<=50),统计具有下列数字的个数,并输出所有符合条件的数字:自然数n,在n的左边加上一个自然数,但该自然数不能超过原数的一半;继续按此规则进行处理,直到不能加自然数为止。例如当n=6时,符合条件条件的是:6,16,26,36,126,136共6个;当n=5时,符合条件的是:5,15,25,125.(0也是自然数,所以要加上本身)。。。求高手帮我解答!!!!定感激涕零!!!

第1个回答  2019-02-25
应该多给几个例子,n=10的时候如何处理?得到10,110,210,1210等等?
若是这样的,试试下面程序:
/*
用c语言编写一个程序:对于一个自然数n(n<=50),统计具有下列数字的个数,
并输出所有符合条件的数字:自然数n,在n的左边加上一个自然数,
但该自然数不能超过原数的一半;继续按此规则进行处理,直到不能加自然数为止。
例如当n=6时,符合条件条件的是:6,16,26,36,126,136共6个;
当n=5时,符合条件的是:5,15,25,125.(0也是自然数,所以要加上本身)。。。
*/
#include
<stdio.h>
#include
<stdlib.h>
int
g_count=0;
void
fun(int
n,int
d,int
b)
{
int
i;
printf("%8d
",d);
g_count++;
if(g_count%8==0)
printf("\n");
for(i=1;i<=n/2;i++)
{
fun(i,i*b+d,b*10);
}
}
void
result(int
n)
{
int
t=n,d=n,b=10;
printf("result:\n");
g_count=0;
while(t>=10)
{
t/=10;
b*=10;
}
fun(n,d,b);
printf("\ntotal
%d
numbers\n\n",g_count);
}
int
main()
{
int
n;
printf("input
n(n<=50):\n");
while(scanf("%d",&n)!=EOF)
{
if(n>=0&&n<=50)
result(n);
printf("input
n(n<=50):\n");
}
return
0;
}
我这,若是放开n的限制,n=200的时候,计算花掉20多秒吧,总共205658个。
n=300的话,算了几分钟都没结束。估计也得使用long
long数据类型了。使用递归不是最快的,重复计算多。
百度推荐也不求真相?有误导了吧。
对于楼主新补充的提升,我的程序是这样做的,满足你的要求。