Удалить из динамического массива все числа, являющиеся числами Армстронга (натуральное число, удовлетворяющее условию: сумма цифр, возведенных в степень n равна самому числу 153=13+53+33 степень n, степень определяется по количеству цифр в числе)
Я написал код, но он почему-то удаляет только одно число, а дальше не идёт, помогите разобраться в чем ошибка.
Код: Выделить всё
#include <stdio.h>
#include <stdlib.h>
int power(int t, int k)
{
int res = 1;
while (k)
{
if (k & 1)
res *= t;
t *= t;
k >>= 1;
}
return res;
}
int Armstrong(int n)
{
int i,a,c=0,b=0;
a=n;
while(a>0)
{
a=a/10;
c++;
}
a=n;
while (a>0)
{
b=b+power((a%10),c);
a=a/10;
}
a=n;
if(b==a)
{
return 1;
}
else
{
return 0;
}
}
int main()
{
int b,n=0,i,k,count=0;
printf("Enter array size\n");
printf("Array size:");
scanf("%d",&n);
int *a=(int *)malloc(n* sizeof(int));
for(i=0; i<n; i++)
{
printf("A[%d]=",i);
scanf("%d",&a[i]);
}
count=0;
int temp;
int j;
for(i=0; i<n; i++)
{
k=Armstrong(a[i]);
if (k==1)
{
temp=a[i];
for (j=i; j<n-1; j++)
{
a[j]=a[j+1];
}
a[n-1]=temp;
for(i=0; i<n; i++)
{
printf("%d ",a[i]);
}
printf("\n");
n--;
a=(int *)realloc(a,n*sizeof(int));
}
}
for(i=0; i<n; i++)
{
printf("%d ",a[i]);
}
return 0;
}