Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Splendid
0 / 0 / 1
Регистрация: 27.03.2008
Сообщений: 75
#1

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

09.02.2009, 16:49. Просмотров 678. Ответов 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;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.02.2009, 16:49
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Почему так работает, а так нет? (C++):

Почему код не работает хотя ошибок нет? Что-то не так с выделением памяти? - C++
#include &lt;math.h&gt; #include &lt;stdio.h&gt; #include &lt;conio.h&gt; #include &lt;iostream&gt; using namespace std; int n = 0; double a, b; ...

почему это так работает - C++
по заданию надо создать два одинаковых массива с случайными числами от 0 до 99 for (i = 0; i &lt; 1000; i++) { cout &lt;&lt;a&lt;&lt;&quot; &quot;; ...

При компилировании компилятор вылетает,нет ли ошибок, или почему он так? - C++
#include &lt;iostream&gt; #include &lt;fstream&gt; #include &lt;iomanip&gt; using namespace std; int main; void init (int matrix, int size); ...

Почему так странно работает калькулятор - C++
Здраствуйте, я сегодня решил взяться за C++, решил написать самое простое, калькулятор: #include &lt;cstdlib&gt; #include &lt;iostream&gt; ...

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

Не понимаю, что не так, почему не работает - C++
#include&lt;cstdlib&gt; #include &lt;stdio.h&gt; #include &lt;conio.h&gt; #include &quot;iostream&quot; using namespace std; void main() {int *a,i,N; ...

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

Thread: можно ли делать так, как в заданном коде и если нет, то почему? - C++
Всем привет. можно ли так делать? Если нет то почему. Спасибо. #include &lt;iostream&gt; #include &lt;thread&gt; #include &lt;chrono&gt; class...

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

Почему цикл работает не так, как ожидается? - C++
Двумя способами реализовал цикл, который увеличивает годовую зарплату на 10% при нажатии 'y' до тех пор пока не будет введен символ 'n', но...

Почему при вводе элементов массива, программа прекращает работу или работает не так, как ожидается? - C++
При вводе элементов массива, программа прекращает работу или не правильно работает. Например если указать размер массива 10 , то ввод...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
10.02.2009, 01:02
Ответ Создать тему
Опции темы

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