2013-04-10 7 views
-2

Как вы будете умножать два числа без эффективного использования «*» и поразрядных операций? (Просто используя такие операторы, как +, -, /).Умножить два числа без использования оператора «*» и побитовых операций

+0

Посмотрите на http://stackoverflow.com/questions/2069488/how-can-i-perform-multiplication-without- a-operator – david99world

ответ

1
a*b == 10^(Log(a*b)) == 10^(Log(a) + Log(b)) == exp(ln(a) + ln(b)) 

где ^ означает возведение в степень и Log является логарифм с основанием 10

+0

exp (ln (a) + ln (b)), то, не используя общее возведение в степень – unkulunkulu

+0

@unkulunkulu Thx. Добавлено его как другое преобразование – halex

0
multiply(a,b): 
     if(a==0) return 0 
     r<-0 
     while(b/a!=r) r++ 
     return r 

Хорошо, что я шучу, но вы должны дать больше информации о вашем поиске: что является эффективным способом для тебя? Можете ли вы дать приблизительную оценку сложности? Или вам нужен самый эффективный алгоритм? Потому что, если вы не делаете ничего точного, я могу ответить тоже:

multiply(a,b): 
     r<-0 
     while(a!=0) 
      r<-r+b 
      b<-b-1 
     return r 
+0

Какой смысл первого примера кода (который, похоже, делает разделение)? – Dukeling

Смежные вопросы