我先来一个,不知道有没有bug,仅供参考。
程序代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void print_value(int count,int current_len,const char *a)
{
char c_str[]={1,0,0,0,0,0,0,0,0,7},c_len,ch;
char b[110];
int i,j,offset=0;
c_len=sizeof(c_str);
memset(b,0,sizeof(b));
printf("%d ",count);
for(i=current_len-1,j=0;i>=0;i--)
{
printf("%d",a[i]);
b[j++]=a[i];
}
while(1)
{
if(offset>current_len-c_len)
break;
if(memcmp(b+offset,c_str,c_len)>=0)
{
for(i=c_len-1+offset,ch=0;i>=0+offset;i--)
{
ch=ch+b[i]-c_str[i-offset];
if(ch>=0)
{
b[i]=ch;
ch=0;
}
else
{
b[i]=ch+10;
ch=-1;
}
}
for(i=0;i<current_len;i++)
{
if(b[i]!=0)
{
offset=i;
break;
}
}
}
else
{
break;
}
}
printf(" ");
for(i=offset;i<current_len;i++)
{
printf("%d",b[i]);
}
printf("\n");
}
int main()
{
char a[100],b[5];
int i,j,n,sum,count=0,current_bit=0,current_len;
printf("请输入一个正整数(长度大于0,小等于100):");
scanf("%u",&n);
memset(a,0,sizeof(a));
current_len=1;
while(1)
{
for(i=0;i<=9;i++)
{
a[current_bit]=i;
for(j=0,sum=0;j<current_len;j++)
sum+=a[j];
memset(b,0,sizeof(b));
sprintf(b,"%d",sum);
for(j=0;j<strlen(b);j++)
{
if(b[j]!=a[current_len-j-1]+'0')
break;
}
if(j==strlen(b) && a[current_len-1]!=0)
{
count++;
print_value(count,current_len,a);
}
}
while(1)
{
if(a[current_bit]<9)
{
a[current_bit]++;
current_bit=0;
break;
}
else
{
current_bit++;
if(current_bit>=current_len)
{
current_len++;
current_bit=0;
memset(a,0,sizeof(a));
break;
}
}
}
if(current_len>n)
break;
}
return 0;
}
[此贴子已经被作者于2022-3-25 11:01编辑过]