![](https://i-blog.csdnimg.cn/blog_migrate/c6301cd63be21e63afc401cc4e2129cd.png)
//自除数
int main()
{
//输入上边界与下边界的值
int left = 0;
int right = 0;
scanf("%d %d", &left, &right);
//循环判断包含的自除数
int i = 0;
int j = 0;
//定义数组用于存放自除数
int m[99999] = { 0 };
//计算数组个数
int win = 0;
for (i = left,j = 0; i <= right; i++,j++)
{
//分情况,判断该数有几位,根据题目,最多可有五位数
if (i <= right)
{
//判断只有一位数时的情况
if (i < 10)
{
//判断是否为自除数
if (0 == i % i)
{
m[j] = i;
win++;
}
}
//判断两位数时的情况
else if (i>=10&&i<100)
{
int x = (i / 10);
int y = i%10;
//如果y=0,则肯定不是自除数
if (y == 0)
{
//不是自除数,元素下标对应的位置
//保留给自除数,因此j--后再++,下标不变,重新寻找自除数
j--;
continue;
}
//判断是否为自除数
if (i % x == 0 && i%y == 0)
{
m[j] = i;
win++;
continue;
}
//不是自除数,元素下标对应的位置
//保留给自除数,因此j--后再++,下标不变,重新寻找自除数
//这里的j--是防止出现不是0但不符合自除数要求的时候
j--;
}
//判断三位数时的情况
else if (i >= 100 && i < 1000)
{
//计算每位
int x = (i / 100);
int y = (i % 100)/10;
int k = i % 10;
if (y == 0||k == 0)
{
j--;
continue;
}
//判断是否为自除数
if (i%x == 0 && i % y == 0&&i%k == 0)
{
m[j] = i;
win++;
continue;
}
j--;
}
//判断四位数时的情况
else if (i >= 1000 && i < 10000)
{
int x = (i / 1000);
int y = (i % 1000) / 100;
int k = (i % 100)/10;
int q = i % 10;
if (y == 0 || k == 0||q == 0)
{
j--;
continue;
}
//判断是否为自除数
if (i % x == 0 && i % y == 0 && i % k == 0&&i%q == 0)
{
m[j] = i;
win++;
continue;
}
j--;
}
//判断为五位数时的情况
else if (i >= 1000 && i < 10000)
{
int x = (i / 10000);
int y = (i / 1000) % 10;
int k = (i % 1000) / 100;
int q = (i % 100)/10;
int t = i % 10;
if (y == 0 || k == 0 || q == 0 || t == 0)
{
j--;
continue;
}
//判断是否为自除数
if (i % x == 0 && i % y == 0 && i % k == 0 && i % q == 0 && i%t == 0)
{
m[j] = i;
win++;
continue;
}
j--;
}
}
}
for (i = 0; i < win; i++)
{
printf("%d,", m[i]);
}
return 0;
}