Как отобразить палиндромы? - PullRequest
0 голосов
/ 21 сентября 2019

Я хочу отобразить палиндромы для произведения двухзначных трехзначных чисел в диапазоне от 100 до 999.Что-то не так с моим кодом, я не могу его разместить.

public static void main (String[] args) {
   int num = 0, remainder = 0, sum = 0, b;
   int temp;

   for (b = 999; b >= 100; b--) {
      for (a = 999; a >= 100; a--) {
         num = (a * b);
         temp = num;

         while (num > 0) { 
            remainder = num % 10;  
            sum = (sum * 10) + remainder;    
            num = num / 10;
         }

         if (temp == sum)   
            System.out.println(temp);           
      }
   }
}

Ожидаю вывод, но не получаю.

Ответы [ 2 ]

1 голос
/ 21 сентября 2019

Я скопировал ваш файл и прямо перед вашим оператором if поместил в свою копию следующую строку:

System.out.println(temp + " " + sum);

Итак, после выполнения кода здесь были результаты.

(отсчитывается при каждом выполнении оператора печати)

Формат: темп, сумма

1. temp = 98488, sum = -714680119

2. temp = 98384, sum = 243953829

3. temp = 98280, sum = -31332991

>4000. temp = 10000, sum = -110845663

Ваш temp никогда не равен вашему sum, что означает, что ваш оператор if никогда не будет запускать вашу команду печати.Вот ссылка на вставку, которая будет содержать все результаты.Это так долго, что я не могу разместить его здесь (если бы я мог, никто бы не захотел его прочитать) https://pastebin.com/7WxYKdgy

Это, вероятно, из-за целочисленного переполнения.Учить больше. Как Java обрабатывает целочисленные переполнения и переполнения и как вы можете это проверить?

1 голос
/ 21 сентября 2019

Этот код никогда не сбрасывает sum в ноль. Объявление переменных в точке первого использования помогает избежать такого рода проблем.

public static void main(String[] args) {
  for (int b = 999; b >= 100; b--) {
    for (int a = 999; a >= 100; a--) {
      int sum = 0;
      int num = (a * b);
      int temp = num;

      while (num > 0) {
        int remainder = num % 10;
        sum = (sum * 10) + remainder;
        num = num / 10;
      }

      if (temp == sum) {
        System.out.println(temp);
      }
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...