Напишите функцию для деления числа на 3 без использования операторов /,% и *. Итоа () доступны? - PullRequest
8 голосов
/ 15 января 2010

Я пытался решить это сам, но я не мог получить никакой подсказки.

Пожалуйста, помогите мне решить эту проблему.

Ответы [ 17 ]

1 голос
/ 29 июля 2011
int divideby3(int n)
{
    int x=0;
    if(n<3) { return 0; }
    while(n>=3)
    {
        n=n-3;
        x++;
    }
    return x;
}
0 голосов
/ 21 октября 2012

Решение опубликовано http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=3776384&page=1&extra=#pid22323016

int DividedBy3(int A) {
    int p = 0;
    for (int i = 2; i <= 32; i += 2)
        p += A << i;
    return (-p);
}

Пожалуйста, скажите что-нибудь об этом, спасибо:)

0 голосов
/ 16 января 2010

Преобразование 1/3 в двоичный файл

, т. Е. 1/3 = 0,01010101010101010101010101

, а затем просто "умножить" на это число, используя сдвиги и сумму

0 голосов
/ 15 января 2010

для положительного целочисленного деления

result = 0
while (result + result + result < input)
 result +=1
return result
0 голосов
/ 15 января 2010
unsigned int  div3(unsigned int m) {
   unsigned long long n = m;
   n += n << 2;
   n += n << 4;
   n += n << 8;
   n += n << 16;
   return (n+m) >> 32;
}
0 голосов
/ 15 января 2010

Как насчет этого, в каком-то Python, подобном псевдокоду. Он делит ответ на целую часть и дробную часть. Если вы хотите преобразовать его в представление с плавающей запятой, то я не уверен, что это лучший способ сделать это.

 x = <a number>  
 total = x
 intpart = 0
 fracpart = 0

 % Find the integer part
 while total >= 3
    total = total - 3
    intpart = intpart + 1

 % Fraction is what remains
 fracpart = total


 print "%d / 3 = %d + %d/3" % (x, intpart, fracpart)

Обратите внимание, что это не будет работать для отрицательных чисел. Чтобы это исправить, нужно изменить алгоритм:

  total = abs(x)
  is_neg = abs(x) != x

  ....

  if is_neg
      print "%d / 3 = -(%d + %d/3)" % (x, intpart, fracpart)
0 голосов
/ 15 января 2010

Медленно и наивно, но оно должно работать, если существует точный делитель. Дополнение разрешено, верно?

for number from 1 to input
  if number == input+input+input
    return number

Расширение его для дробных делителей оставлено читателю в качестве упражнения. В основном тест для +1 и +2, я думаю ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...