Запишите функцию для деления числа на 3, не используя/, % и * операторы. itoa () доступный?

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

Помогите мне решить это.

8
задан Peter O. 21 October 2012 в 19:26
поделиться

14 ответов

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

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

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

-1
ответ дан 5 December 2019 в 04:32
поделиться

Если вам нужен ваш индекс, используйте следующее:

$("#selectoption>li").click(function(){
    alert($(this).index());
});

Хотя вместо этого я бы посмотрел на ответ Тату Улманена.

-121--4746538-

Некоторые идеи:

  • PrintWriter не будет работать, если вы работаете с двоичным потоком (PDF являются двоичными)
  • Недопустимое состояние может возникнуть при наличии тайм-аута на стороне клиента или отключении. Пакетная трассировка процесса покажет вам многое (даже если вы не можете прочитать их хорошо). Посмотрите на WiShark или на то, что доступно для вашей платформы. Это стоит вашего времени, чтобы узнать хотя бы немного о том, что происходит на уровне проводов.
  • Убедитесь, что данные, возвращаемые из генерируемого отчета, на самом деле являются pdf. Запишите его в файл и попытайтесь открыть.
  • В некоторых ситуациях перед записью в поток необходимо установить заголовок длины http, иначе они сдаются, когда данные начинают отображаться. Возможно, здесь это необходимо.
-121--4817920-

Это очень легко, так что легко я только намекну на ответ -

Основные логические логические элементы (и, или, не, xor,...) не делают деление. Несмотря на этот недостаток, ЦП могут выполнять разделение. Ваше решение очевидно: найдите ссылку, которая говорит вам, как построить делитель с логической логикой и написать какой-нибудь код для реализации этого.

1
ответ дан 5 December 2019 в 04:32
поделиться

Если вы используете запрос GET для отправки больших объектов, вы неправильно используете REST.

  • GET следует использовать для извлечения ресурсы (через некие уникальные идентификатор)
  • Для создание ресурсов (с содержимым в корпусе)
  • PUT следует использовать для обновление ресурса (с помощью содержимое в теле)
  • DELETE следует использовать для удаления ресурса

Если вы следуете этим инструкциям, вам никогда не придется иметь слишком длинные URI.

Здесь приведены рекомендации REST: http://www.xml.com/pub/a/2004/08/11/rest.html

-121--2224500-

У меня есть мысль. Это случилось со мной много лет назад. В IB, связано ли ваше свойство View с вашим представлением?

Я однажды отключил их, и приложение никогда не запускалось.

Btw, хуже приходит к худшему, начать проект снова. Не стоит этих головных болей, если вы проделали 2 минут работы до сих пор.

Добро пожаловать в мир программирования iPhone. Вам может понадобиться один из этих довольно скоро wigsmen.com; -)

-121--1518349-

Звучит как домашнее задание:)

I изображение можно написать функцию, которая итеративно делит число. Например, вы можете смоделировать то, что вы делаете с ручкой и листом бумаги, чтобы разделить числа. Также можно использовать операторы shift и + для определения того, являются ли промежуточные результаты слишком маленькими/большими, и итерационно применять поправки. Я не собираюсь записывать код, хотя...

1
ответ дан 5 December 2019 в 04:32
поделиться
if(number<0){ // Edited after comments
number = -(number);
}
quotient = 0;
while (number-3 >= 0){ //Edited after comments..
number = number-3;
quotient++;
}//after loop exits value in number will give you reminder

Редактировать: проверено и работает идеально хорошо: (

Надеюсь, это помогло.: -)

3
ответ дан 5 December 2019 в 04:32
поделиться

Вот решение, реализованное в C ++:

#include <iostream>

int letUserEnterANumber()
{
    int numberEnteredByUser;
    std::cin >> numberEnteredByUser;
    return numberEnteredByUser;
}

int divideByThree(int x)
{
    std::cout << "What is " << x << " divided by 3?" << std::endl;
    int answer = 0;
    while ( answer + answer + answer != x )
    {
        answer = letUserEnterANumber();
    }
}

; -)

4
ответ дан 5 December 2019 в 04:32
поделиться

x / 3 = E ^ (ln (x) - ln (3))

9
ответ дан 5 December 2019 в 04:32
поделиться

Редактировать: упс, я неправильно прочитаю вопрос о названии. Умножного оператора также запрещена.

В любом случае, я считаю, что хорошо не удалить этот ответ для тех, кто не знал о разделении на неисправность двух постоянных.


Решение состоит в том, чтобы размножаться на волшебный номер, а затем для извлечения 32 левых битов:

разделить на 3 эквивалентно умножению на 1431655766, а затем сдвиг на 32, в C:

int divideBy3(int n)
{
  return (n * 1431655766) >> 32;
}

см. Калькулятор волшебного номера хакера Hacker .

10
ответ дан 5 December 2019 в 04:32
поделиться

Еще один способ ускорить подсчет символов - использовать векторизацию!

Вот пример того, как это сделать в отношении UTF8-encoded последовательностей:

Даже быстрее UTF-8 подсчет символов,

http://www.daemonology.net/blog/2008-06-05-faster-utf8-strlen.html

-121--2109225-

Можно попробовать

Изменить - > Intellisense - > Обновить локальный Cache (CTRL + Shift + R)

From SQL Server 2008 Intellisense update/refresh on schema changes

-121--3808437-

Предполагается ли использовать itoa () для этого назначения? Потому что тогда это можно использовать для преобразования в базовый 3 последовательности, отбросить последний символ, а затем восстановить обратно в базовый 10.

14
ответ дан 5 December 2019 в 04:32
поделиться

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

SO 1/3 = 0,0101010101010101010101010101

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

0
ответ дан 5 December 2019 в 04:32
поделиться
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
ответ дан 5 December 2019 в 04:32
поделиться

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

 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
ответ дан 5 December 2019 в 04:32
поделиться

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

result = 0
while (result + result + result < input)
 result +=1
return result
0
ответ дан 5 December 2019 в 04:32
поделиться
long divByThree(int x)
{    
  char buf[100];
  itoa(x, buf, 3); 
  buf[ strlen(buf) - 1] = 0; 
  char* tmp; 
  long res = strtol(buf, &tmp, 3);

  return res;
}
1
ответ дан 5 December 2019 в 04:32
поделиться

Использование математического соотношения:

1/3 == Sum[1/2^(2n), {n, 1, Infinity}]

У нас есть

int div3 (int x) {
   int64_t blown_up_x = x;
   for (int power = 1; power < 32; power += 2)
      blown_up_x += ((int64_t)x) << power;
   return (int)(blown_up_x >> 33);
}

, если вы можете использовать только 32-битные целые числа,

int div3 (int x) {
     int two_third = 0, four_third = 0;
     for (int power = 0; power < 31; power += 2) {
        four_third += x >> power;
        two_third += x >> (power + 1);
     }
     return (four_third - two_third) >> 2;
}

4/3 - 2/3 лечение используется, потому что X >> 1 - это пол (X / 2) вместо раунда (X / 2) .

10
ответ дан 5 December 2019 в 04:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: