Почему я получаю неправильный вывод для этого кода (чтобы вывести число палиндромов в массиве)? - PullRequest
0 голосов
/ 02 марта 2019

найти число палиндромов в массиве

Я сначала выяснил количество цифр числа, а затем умножил первый остаток на цифру-1-3-й срок, а затем остаток два с цифрой 2-й срок и так далее.если sum == num, то для запуска добавляется 1.

#include <stdio.h>
#include <math.h>

int main() {
    int a[30], i, n, cont = 0, j, rem, run = 0, sum = 0, b[300], c[300];

    printf("Enter the number of elements\n");

    scanf("%d", &n);

    printf("Enter the array elements\n");

    for (i = 0; i < n; i++)
        scanf("%d", &a[i]);

    for (i = 0; i < n; i++) {
        c[i] = a[i];
        b[i] = a[i];
        cont = 0;

        while (b[i] != 0) {
            b[i] = b[i] / 10;
            cont++;
        }
        sum = 0;

        while (a[i] != 0) {
            rem = a[i] % 10;
            sum = sum + rem * pow(10, cont - 1);
            cont--;
            a[i] = a[i] / 10;
        }
        if (sum == c[i])    
            run++;
    }
    printf("%d\n", run);
}

Есть ли проблемы с циклами for и while?

1 Ответ

0 голосов
/ 02 марта 2019

Ваши программы работают, но можно сделать несколько замечаний

  • проверить результат scanf
  • проверить диапазон n
  • вам не нужны массивы b и c , и даже если вы используете их в качестве массива, их размер может быть 30 как a

Предложение:

#include<stdio.h>
#include<math.h>

#define N 30

int main()
{
  int a[N],i,n,run=0;

  printf("Enter the number of elements\n");
  if ((scanf("%d",&n) != 1) || (n < 1) || (n > N)) {
    puts("invalid number of element");
    return -1;
  }

  printf("Enter the array elements\n");

  for(i=0;i<n;i++)
  {
    if (scanf("%d",&a[i]) != 1)
    {
      puts("invalid number");
      i -= 1;
      continue;
    }
  }

  for(i=0;i<n;i++)
  {
    int b  = a[i];
    int cont=0;

    while(b!=0)
    {
      b=b/10;
      cont++;
    }

    int sum=0;

    b = a[i];
    while(b!=0)
    {
      int rem=b%10;

      sum=sum+rem*pow(10,cont-1);
      cont--;
      b /= 10;
    }

    if(sum==a[i]) {
      printf("%d is a palindrome\n", a[i]);
      run++;
    }
  }

  printf("%d\n",run);
}

Компиляция и выполнение:

pi@raspberrypi:/tmp $ gcc -pedantic -Wextra p.c -lm
pi@raspberrypi:/tmp $ ./a.out
Enter the number of elements
3
Enter the array elements
1
12
12321
1 is a palindrome
12321 is a palindrome
2

Обратите внимание, что вы также можете прочитать числа в строке, чтобы быть более общими и избежать исчисления

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...