2015-06-24 2 views
-2

поэтому эта программа в основном проходит через 1000-значную строку (она сокращена в этом примере) и вытащить 5 цифр, которые составляют самый высокий продукт. Я могу вывести сумму чисел, составляющих наивысший продукт, но не фактические цифры, которые сделали это.Thousand Digit String

public class ThousandDigitString 
{ 
     public static void main(String[] args){ 
     String num = "73167176531"; 
     int product = 0; 
     int product2 = 0; 
     for(int i = 0; i < num.length()-4; i++) 
     { 
      product2 = Character.getNumericValue(num.charAt(i))* Character.getNumericValue(num.charAt(i+1)) * Character.getNumericValue(num.charAt(i+2)) * 
         Character.getNumericValue(num.charAt(i+3))* Character.getNumericValue(num.charAt(i+4));; 
      if(product2 > product) 
      { 
       product=product2; 
      } 
     } 
     System.out.println(product);   
    } 
} 
+0

Так это проблема, которую вы хотите печатать или иным образом хранить цифры, составляющие продукт? – lilott8

+0

В чем ваш вопрос? – Naveed

+0

Должны ли они быть последовательными? Потому что я думаю, что 7 * 6 * 7 * 7 * 6 даст самый высокий продукт там, и ваш 'product2' не найдет этого. – RealSkeptic

ответ

0

При замене продукта2 на изделие вы можете хранить 5 цифр, составляющих продукт, а затем в конце распечатать их. Либо в 5 новых переменных, либо в массиве.

public class ThousandDigitString 
{ 
     public static void main(String[] args){ 
     String num = "73167176531"; 
     int product = 0; 
     int product2 = 0; 
     int i1 = 0; 
     int i2 = 0; 
     int i3 = 0; 
     int i4 = 0; 
     int i5 = 0; 

     for(int i = 0; i < num.length()-4; i++) 
     { 
      product2 = Character.getNumericValue(num.charAt(i))* Character.getNumericValue(num.charAt(i+1)) * Character.getNumericValue(num.charAt(i+2)) * 
         Character.getNumericValue(num.charAt(i+3))* Character.getNumericValue(num.charAt(i+4));; 
      if(product2 > product) 
      { 
       int i1 = num.charAt(i); 
       int i2 = num.charAt(i+1); 
       int i3 = num.charAt(i+2); 
       int i4 = num.charAt(i+3); 
       int i5 = num.charAt(i+4); 
      } 
     } 
     System.out.println(product); 
     System.out.println(i1); 
     System.out.println(i2); 
     System.out.println(i3); 
     System.out.println(i4); 
     System.out.println(i5);   
    } 
} 

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

+1

Или просто сохраните начальный индекс из 5 цифр в одной переменной int. – Codebender

0

Я думаю, что это намного проще, чем вы это делаете. Разбирайте строку в виде массива, чтобы узнать, сколько 5 цифр. На самом деле вам не нужно умножать цикл.

Как только вы узнаете 5 лучших цифр. это цифры, которые вы хотите. конвертировать их в int и умножать их, что дает вам продукт.

+0

Вопрос был непонятен, но hes фактически ищет самый большой продукт из 5 ** последовательных ** цифр. – Paul

1

Вы можете сохранить отдельные символы в массив или ArrayList и когда вы проверяете, если product2> продукт сохранить массив от

Например:

public class ThousandDigitString 
{ 
    public static void main(String[] args){ 
     String num = "73167176531"; 
     int product = 0; 
     int product2 = 0; 
     int index = 0; 
     int[] numbers = new int[5]; 
     for(int i = 0; i < num.length()-4; i++) 
     { 
      product2 = Character.getNumericValue(num.charAt(i))* Character.getNumericValue(num.charAt(i+1)) * Character.getNumericValue(num.charAt(i+2)) * 
         Character.getNumericValue(num.charAt(i+3))* Character.getNumericValue(num.charAt(i+4));; 
      if(product2 > product) 
      { 
       product=product2; 
       index = i; 
      } 
     } 
     numbers[0] = Character.getNumericValue(num.charAt(index)); 
     numbers[1] = Character.getNumericValue(num.charAt(index+1)); 
     numbers[2] = Character.getNumericValue(num.charAt(index+2)); 
     numbers[3] = Character.getNumericValue(num.charAt(index+3)); 
     numbers[4] = Character.getNumericValue(num.charAt(index+4)); 

     System.out.println(Arrays.toString(numbers)); 
     System.out.println(product);   
    } 
} 
2
int startingIndex = 0; 
for(int i = 0; i < num.length()-4; i++) 
    { 
     product2 = Character.getNumericValue(num.charAt(i))*   Character.getNumericValue(num.charAt(i+1)) * Character.getNumericValue(num.charAt(i+2)) * 
        Character.getNumericValue(num.charAt(i+3))* Character.getNumericValue(num.charAt(i+4));; 
     if(product2 > product) 
     { 
      product=product2; 
      startingIndex = i; 
     } 
    } 
    System.out.println(product); 
    // retrieve digits from string at startingIndex to startingIndex + 4 
Смежные вопросы