Суммирование целых чисел - PullRequest
       30

Суммирование целых чисел

0 голосов
/ 30 сентября 2011

инструкции: введите целое число (32 бита) и сложите его цифры, вам может быть дано отрицательное или положительное целое число При чтении с отрицательным целым, суммируйте цифры, но игнорируйте знак -.

это то, что у меня есть. Почему-то я не могу игнорировать отрицательные знаки, когда целое число отрицательное.

import java.util.Scanner;

public class Exercise2_6M {
    public static void main(String[] args) {
        // Create a Scanner
        Scanner input = new Scanner(System.in);

        // Enter amount
        System.out.print("Enter an integer:");
        int integer = input.nextInt();
        if (integer < 0)
            integer = -integer;

        // Calculations
        int rinteger = Math. abs (integer);
        int lastinteger = integer % 10;
        int X = integer / 10;
        int secondinteger= X % 10;
        int firstinteger = X /10;
        int finalinteger = firstinteger + secondinteger + lastinteger;


        // Display results
        System.out.println("Sum all digits in " + rinteger + " is " + finalinteger);
    }
}

Ответы [ 3 ]

4 голосов
/ 30 сентября 2011

Когда я запускаю его, он игнорирует негативы, как и положено. Я вижу две проблемы.

  1. Когда вы печатаете отрицательное число, вместо него печатается положительное. Попробуйте сохранить исходное значение для печати. ​​
  2. Он не работает для больших чисел, потому что вы жестко кодируете 3 цифры Подумайте об этом, чтобы получить все цифры.

Вот мои тестовые результаты:

Первое - хорошо, второе - хорошо, третье должно сказать «Сумма всех цифр в -4 равно 4», а последнее должно сказать «Сумма всех цифр в 12345 - 15».

C:\Documents and Settings\glowcoder\My Documents>java Exercise2_6M
Enter an integer:5
Sum all digits in 5 is 5

C:\Documents and Settings\glowcoder\My Documents>java Exercise2_6M
Enter an integer:100
Sum all digits in 100 is 1

C:\Documents and Settings\glowcoder\My Documents>java Exercise2_6M
Enter an integer:-4
Sum all digits in 4 is 4

C:\Documents and Settings\glowcoder\My Documents>java Exercise2_6M
Enter an integer:12345
Sum all digits in 12345 is 132
1 голос
/ 30 сентября 2011

Чтобы игнорировать отрицательный знак:

int integer = Math.abs(input.nextInt());

Редактировать: Я не заметил, что ваш код уже сделал это.Чтобы код показывал отрицательный знак в конце, избавьтесь от следующих строк:

if (integer < 0)
        integer = -integer;

, поскольку вы уже делаете

int rinteger = Math. abs (integer);

Затем замените все экземпляры, кромекулак integer в разделах вычислений с помощью rinteger, например:

    // Calculations
    int rinteger = Math. abs (integer);
    int lastinteger = rinteger % 10;
    int X = rinteger / 10;
    int secondinteger= X % 10;
    int firstinteger = X /10;
    int finalinteger = firstinteger + secondinteger + lastinteger;

Наконец, при отображении результатов используйте целое число вместо rinteger для восстановления знака минус или просто вставьте знак минуса вручнуюif integer<0.

Ваш код также имеет недостатки, если целое число больше 3 цифр, как указали другие, но это отдельная проблема.

Чтобы добавить более 3 цифр, выпонадобится петля.Попробуйте это:

import java.util.Scanner;
public class Exercise2_6M
{
    public static void main(String[] args) 
    {
        // Create a Scanner
        Scanner input = new Scanner(System.in);

        // Enter amount
        System.out.print("Enter an integer: ");
        int integer = input.nextInt();

        // Calculations
        int rinteger = Math. abs (integer);
        int sum = 0;
        int i=0;

        //loop through each digit (starting from the least significant) until the end of the number
        while(rinteger / Math.pow(10,i) > 0)
        {
            sum+=getDigit(rinteger,i);
            i++;
        }


        // Display results
        System.out.println("Sum all digits in " + integer + " is " + sum);
    }

    public static int getDigit(int num, int power)
    {
        return (num % (int)Math.pow(10,power+1)) / (int)Math.pow(10,power);
    }
}
0 голосов
/ 30 сентября 2011

Я не могу вспомнить конкретно, но целое число может быть зарезервированным ключевым словом Java, поэтому вы можете изменить это имя переменной (то есть inputInt или что-то).Мысль, стоящая за вашим кодом, выглядит звучащей ... но вместо:

integer = -integer;

try:

inputInt = (-1)*inputInt;

Это должно сработать.

...