Pracuję nad programem, który ma jeden cel, jest odwrócenie trzech cyfr. Kod wygląda jak

int reverseFunction(int userNumber){ 
    int reverse = 0,mod; 
    while (userNumber != 0)
    {
        mod = userNumber%10;
        reverse = reverse*10 + mod; 
        userNumber /= 10; 
    }

    return reverse;
}

Działa to świetnie, chyba że przekazujesz numer, który ma pierwszą liczbę tylko 1 większa niż ostatnia. Odwrotność jest wywoływana później, a jeśli powyższe jest prawdziwe, kończysz z dwoma cyframi. na przykład

The number you entered is: 473.

The reversal of the input is: 374.

Subtraction of reversal from the original number is: 99.

Reversal of the resulting number is: 99.

Addition of the number to the un-reversed form is: 198.

The final outcome should be: 1089, which is our “Magic Number”.

Jeśli "99" został wyściełany zero "099", wyplułoby 1089, co jest właściwą liczbą. Jak rozwiązać ten problem i podkładkę z zerową? Widziałem sposoby wysyłania zero, ale nie obliczyć zero. Używam C ++.

c++
1
Burns 15 luty 2017, 22:35

2 odpowiedzi

Najlepsza odpowiedź

Nie ma nic złego w funkcji reverse(). Wydaje się, że problem, który masz, jest w innej części swojego kodu. Mianowicie: W kodzie, który dodaje odwrócony numer do pierwotnej nie odwróconej formy.

Co powinieneś zrobić, aby zachowywał to sposób, w jaki potrzebujesz, jest najpierw sprawdzić, czy numer ma odpowiednio 1, 2 lub 3 cyfry oraz wykonać odpowiednio dodawanie.

Na przykład:

int add(int _d, int _r){ // _d is "direct" and _r is "reversed" number
    int result = _d;
    if(_r > 99){ // 3 digits
      result += _r;
    }else if(_r > 9){ // only 2 digits
      result += _r * 10;
    }else{ // only 1 digit
      result += _r * 100;
    }
    return result;
}
0
YePhIcK 15 luty 2017, 19:43

To dlatego, że Twoja funkcja odwrotna jest ogólna dla liczby wszystkich rodzajów cyfr. Więc powinieneś określić, ile cyfr chcesz wyraźnie:

#include <math.h> 
int reverseFunction(int userNumber,int numOfDigits)
{ 
    int reverse = 0,mod; 
    int digitsCount = 0;
    while (userNumber != 0)
    {
        mod = userNumber%10;
        reverse = reverse*10 + mod; 
        userNumber /= 10; 
        digitsCount++;
    }
    return reverse*pow(10,numOfDigits-digitsCount);
}

Powinno to wykonać tęczenie dla wszystkich rodzajów cyfr.

0
Bowen Kuang 16 luty 2017, 21:53