Логика за этой последовательностью построена, но проблема возникает? - PullRequest
0 голосов
/ 26 октября 2019

Я должен напечатать 8 условия последовательности как

1, 2, 4, 8, 16, 22, 26, 38, ....

Я завершил свою логику до 16, что каждый новый термин - это предыдущий член, умноженный на 2. И после 16 логика заключается в том, что мы разделяем эту часть на две части как

26 = 22 + (2 * 2)

До сих пор я делал

int x = 1, num, num1, n = 1;
while (n <= 10)
{
   while (n <= 4)
   {
      if (n == 1)
      {
         cout << x << ", ";
      }
      num = x % 10;
      num1 = num % 10;
      x = x * 2;
      cout << x << ", ";
      n++;
   }
   if (x == 16)
   {
      num = x % 10;
      num1 = num % 10;
      x = x + (num * num1) - 30;
      cout << x << ", ";
   }
   else
   {
      num = x % 10;
      num1 = num % 10;
      x = x + (num * num1);
      cout << x << ", ";
   }
   n++;
}

1 Ответ

0 голосов
/ 26 октября 2019

Видимо, мы просто добавляем произведение всех цифр к текущему номеру. Это прекрасно работает и для 1, 2, 4, 8 (например, 4 = 2 + (2)), поэтому не требуется никакой специальной обработки. Однако, очевидно, нам нужно игнорировать нули, иначе мы не изменим после 102 больше ...

Таким образом, мы можем немного упростить алгоритм:

unsigned int number = 1; // start value
std::cout << number; // OK, would require special handling for n == 0...

while(n--) // you could ask the user to input n or just set it to 10
           // (I consider this variant a bit more elegant)
{
    unsigned int product = 1;
    unsigned int tmp = number;
    // now iterate as long as you have more digits!
    while(tmp)
    {
        unsigned int modulo = tmp % 10;
        tmp /= 10;
        // neat little trick: if modulo != 0, comparison is false, which is
        // converted to 0, which is neutral for OR operation; otherwise, we
        // get 0 | 1, which is neutral for multiplication... 
        product *= modulo | (modulo == 0);
    }
    number += product;
    std::cout << ", " << number;
}

Это будет работатьхорошо даже для тарифа больше номеров, чем только первые десять (пока не произойдет переполнение продукта или сумма ...).

...