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

Перевод обыкновенной дроби в десятичную (в т.ч. периодическую) - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Координаты мыши http://www.cyberforum.ru/cpp-beginners/thread647966.html
Предисловие: делаю OpenGl приложение в консольном режиме. Как определить координаты мыши? POINT pt; GetCursorPos(&pt); //Get the current Mouse location Пишет что: 1>MainFile.c(41): error C2275: POINT: недопустимое использование этого типа в качестве выражения 1> C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\windef.h(343): см. объявление "POINT" 1>MainFile.c(41):...
C++ Программа светофор на Windows Forms Помогите пожалуйста решить такую задачу: нужно создать оконное приложение, в котором будет нарисован светофор и при нажатии на кнопку он должен менять цвета. http://www.cyberforum.ru/cpp-beginners/thread647964.html
C++ Подиагональное заполнение двухмерного массива
Необходимо заполнить двухмерный массив M змейкой по диагоналям. Подскажите как это сделать, если кто-нибудь делал что-то подобное.
C++ Проверьте пожалуйста, правильно ли я сделал задание
Вот задание Дано действительное х. Вычислить \frac{(x-1)(x-3)(x-7)K(x-63)}{(x-2)(x-4)(x-8)K(x-64)} { { int n=63,i,j=n+1; double x,s,f,t,g; cout<<"Vvedite x= "; cin>>x;
C++ Вызов формы программно http://www.cyberforum.ru/cpp-beginners/thread647855.html
В басике всо было просто - ничего подключать, ничего не срать и тп. Тут же етот си на всем экономит, и всю грязную работу надо делать самому. То, что я хочу сделать - выглятит так : У меня 2 формы через мастер,, и мне надо при определенном событии мою форму свернуть (this->Hide();) а другую открыть. this->Show(); он делает, а к другим он не хочет. Что надо подключать и объявлять и пожалуйста...
C++ Как поставить степень в C++ Вечер добрый, создал float a и double b теперь хочу задать им значения, a = -0.00330044982 b = 0.731 x 10 в -3408 степени. Как это реализовать? подробнее

Показать сообщение отдельно
Байт
 Аватар для Байт
13974 / 8805 / 1227
Регистрация: 24.12.2010
Сообщений: 15,949
08.09.2012, 10:52     Перевод обыкновенной дроби в десятичную (в т.ч. периодическую)
В коде, на который сослался Day - ошибка. Для знаменателя > 10 не учтено, что первые нули не входят в период. Вот исправленный вариант.
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#include <stdio.h>
#include <alloc.h>
Drob(int NN, int M)
{
  long N = NN;   // исходное значение нам еще понадобится
  int c, i, step, period, dop, flag, fnol;
  int *x;
 
  printf(" %d / %d =\n", NN, M);
  x = (int *)malloc(M * sizeof(int));
  for(i=0; i<M; i++) x[i] = 0;
  fnol = step = 1;
  printf("0.");
  while(1) {
    N *= 10;
    c = N / M;
    if (c==0 && fnol) {
      printf("0");
      NN = N;
      continue;
    }
    fnol = 0;
    N = N % M;
    if (N==0) {
      //printf("точная десятитичная дробь\n");
      period = 0;
      break;
    }
    if (x[N]!=0) {
      period = step - x[N];
      dop = x[N] - 1;  // Сколько цифр надо печатать до периода
      // printf("Периодическая дробь, длина периода = %d dop=%d\n", period, dop);
      break;
    }
    x[N] = step;
    step++;
  }
      // Теперь число печатаем
  N = NN;
  i = 0;
  flag = 0;
  while(1) {
    if (flag==0 && period && i >= dop) {
      printf("(");
      flag = 1;  // Флаг - печатаем период
      i = 0;
    }
    N *= 10;
    c = N / M;
    printf("%d", c);
    N = N % M;
    if (N==0) break;
    if (period==0) continue; // Для точной дроби все что ниже - не нужно
    i++;
    if (flag && i >= period) {
      printf(")\n");
      break;
    }
  }
}
/*****************/
main(int argc, char *argv[])
{
   if (argc<3) exit(1);
   Drob(atoi(argv[1]), atoi(argv[2]));
}
/**************/
Запуск: drob.exe числитель знаменатель
Работает для не очень больших чисел (чтоб можно было выделить память для int *x)

Добавлено через 1 минуту
Источник Перевести простую пробь в десятичную
 
Текущее время: 23:07. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru