Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
Splendid
0 / 0 / 1
Регистрация: 27.03.2008
Сообщений: 75
#1

Почему так работает, а так нет?

09.02.2009, 16:49. Просмотров 735. Ответов 5
Метки нет (Все метки)

так работает

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
// Возведение b в степень s по модулю m
float powmod(float b, long s)
{
  float c=1;
 
  while (s) {
    if (s%2==0) {
      s /= 2;
       b *= b; 
      }
    else {
      s--;
       c *= b; 
      }
  }
  return c;
}
 
float main(void)
{
 
  float b = 2;
  long s =39;
 
  printf ("%f\n",powmod(b, s));
 
  return 0;
}
а так - нет...а нужны именно инты...что делать? Помогите, плиз!!!

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <stdio.h>
 
// Возведение b в степень s по модулю m
unsigned int powmod(unsigned int b, unsigned int s)
{
  unsigned int c=1;
 
  while (s) {
    if (s%2==0) {
      s /= 2;
       b *= b; 
      }
    else {
      s--;
       c *= b; 
      }
  }
  return c;
}
 
unsigned int main(void)
{
 
  unsigned int b = 2;
  unsigned int s =39;
 
  printf ("%f\n",powmod(b, s));
 
  return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.02.2009, 16:49
Ответы с готовыми решениями:

Почему код не работает хотя ошибок нет? Что-то не так с выделением памяти?
#include &lt;math.h&gt; #include &lt;stdio.h&gt; #include &lt;conio.h&gt; #include &lt;iostream&gt;...

почему это так работает
по заданию надо создать два одинаковых массива с случайными числами от 0 до 99...

При компилировании компилятор вылетает,нет ли ошибок, или почему он так?
#include &lt;iostream&gt; #include &lt;fstream&gt; #include &lt;iomanip&gt; using namespace...

Почему функция работает именно так?
Доброго времени суток! Помогите разобраться с кодом пожалуйста У меня есть...

Почему так странно работает калькулятор
Здраствуйте, я сегодня решил взяться за C++, решил написать самое простое,...

5
YurA_280784
Заблокирован
09.02.2009, 16:55 #2
Потому что ты в строке
C++
1
printf ("%f\n",powmod(b, s));
пишешь преобразовывать в %f - float как я гляжу 2-й вариант возвращает UINT, напиши спецификатор формата другой - %d вот и всё...
0
Splendid
0 / 0 / 1
Регистрация: 27.03.2008
Сообщений: 75
09.02.2009, 16:59  [ТС] #3
нет, дело не в этом, это просто опечатка. В первом варианте выводит правильное число, а во втором - ноль
0
Gravity
569 / 563 / 64
Регистрация: 29.01.2009
Сообщений: 1,274
09.02.2009, 17:13 #4
У тебя элементарно не хватает места в переменной, чтобы записать такое большое число. Ты посчитай на калькуляторе сколько получится при 2^39 и сравни размер инта.
0
Splendid
0 / 0 / 1
Регистрация: 27.03.2008
Сообщений: 75
09.02.2009, 17:18  [ТС] #5
все, я поняла - просто очень большое число получается, не влазит в тип int. Сорри за беспокойство - спасибо!!
0
accept
4833 / 3255 / 454
Регистрация: 10.12.2008
Сообщений: 10,569
10.02.2009, 01:02 #6
C++
1
2
3
4
5
6
       else {  
           s--;  
           c *= b;   
       }  
   }  
   return c;
в этом моменте когда степень двойки вылазит за край, c становится равно нулю и всё и дальше ноль умножается на всё остальное
для больших степеней double (float тоже может не потянуть, а результат будет ещё непредсказуемее)
0
10.02.2009, 01:02
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.02.2009, 01:02

Не понимаю, что не так, почему не работает
#include&lt;cstdlib&gt; #include &lt;stdio.h&gt; #include &lt;conio.h&gt; #include &quot;iostream&quot;...

Thread: можно ли делать так, как в заданном коде и если нет, то почему?
Всем привет. можно ли так делать? Если нет то почему. Спасибо. #include...

Что в коде ни так? while не работает так, как ожидаю
Написанный код, как я думаю, должен выдавать цифры от 0 до 1000, столбиком. Но...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru