Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 31, средняя оценка - 4.61
xagxag
5 / 0 / 1
Регистрация: 25.08.2010
Сообщений: 11
#1

Дано натуральное число n > 1. Определить длину периода десятичной записи дроби 1/n. - C++

19.06.2011, 12:21. Просмотров 4626. Ответов 6
Метки нет (Все метки)

Здравствуйте, помогите пожалуста решить задачу на с++...
Дано натуральное число n > 1. Определить длину периода десятичной
записи дроби 1/n.
http://www.cyberforum.ru/cpp-beginners/thread27590.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.06.2011, 12:21
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Дано натуральное число n > 1. Определить длину периода десятичной записи дроби 1/n. (C++):

Дано натуральное число. Верно ли, что в его десятичной записи есть шесть единиц подряд?
Помогите пожалуйста с программой. Вот задание: Дано натуральное число. Верно...

Дано натуральное число. Определить значение наибольшей нечетной цифры в записи числа
Дано натуральное число. Определить значение наибольшей нечетной цифры в записи...

Дано натуральное четырехзначное число. Определить все цифры в цифровой записи данного числа, на которые оно делится без остатка
Дано натуральное четырехзначное число. Определить все цифры в цифровой записи...

Дано натуральное число m. Найти такое натуральное n, что двоичная запись n получается из двоичной записи m изменением порядка цифр на обратный (
Дано натуральное число m. Найти такое натуральное n, что двоичная запись n...

Найти длину периода и сам период бесконечной степенной дроби по основанию Р
время поджимает, завтра сдавать. препод ни фига не объясняет!!! есть решение,...

6
S9
Волшебник
648 / 251 / 87
Регистрация: 18.12.2010
Сообщений: 541
19.06.2011, 14:00 #2
Решение есть здесь, правда в Паскале.
Я его перевел в С++ как мог (вроде компилируется и выдает некий результат)
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
/*Период дроби равен периоду в последовательности остатков 
(докажите это; в частности, надо доказать, что он не может быть меньше). 
Кроме того, в этой последовательности все периодически повторяющиеся все члены различны, 
а предпериод имеет длину не более n. Поэтому достаточно найти (n+1)-ый член последовательности 
остатков и затем минимальное k, при котором (n+1+k)-ый член совпадает с (n+1)-ым.*/
#include <iostream.h>
 
int main(int argc, char * argv)
{
  int l = 0, r = 1;
  int c, n, k;
  cout << "Please enter n" << endl;
  cin >> n;
  //инвариант: r/n = результат отбрасывания l знаков в 1/n
  while(l != n + 1)
  {
    r = (10 * r) % n;
    l++;
  }
  c = r;
  //c = (n+1)-ый член последовательности остатков
  r = (10 * r) % n;
  k = 0;
  //r = (n+k+1)-ый член последовательности остатков
  while (r != c)
  {
    r = (10 * r) % n;
    k++;
  }
  cout << "Max period " << k << endl;
  cin.get();
}
0
xagxag
5 / 0 / 1
Регистрация: 25.08.2010
Сообщений: 11
19.06.2011, 22:01  [ТС] #3
S9, большое спасибо конешно за помощь...но она не работает....т.е не правильно считает..
если кто сможет подправить буду очень благодарен...

Добавлено через 2 часа 14 минут
Цитата Сообщение от S9 Посмотреть сообщение
Решение есть здесь, правда в Паскале.
Я его перевел в С++ как мог (вроде компилируется и выдает некий результат)
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
/*Период дроби равен периоду в последовательности остатков 
(докажите это; в частности, надо доказать, что он не может быть меньше). 
Кроме того, в этой последовательности все периодически повторяющиеся все члены различны, 
а предпериод имеет длину не более n. Поэтому достаточно найти (n+1)-ый член последовательности 
остатков и затем минимальное k, при котором (n+1+k)-ый член совпадает с (n+1)-ым.*/
#include <iostream.h>
 
int main(int argc, char * argv)
{
  int l = 0, r = 1;
  int c, n, k;
  cout << "Please enter n" << endl;
  cin >> n;
  //инвариант: r/n = результат отбрасывания l знаков в 1/n
  while(l != n + 1)
  {
    r = (10 * r) % n;
    l++;
  }
  c = r;
  //c = (n+1)-ый член последовательности остатков
  r = (10 * r) % n;
  k = 0;
  //r = (n+k+1)-ый член последовательности остатков
  while (r != c)
  {
    r = (10 * r) % n;
    k++;
  }
  cout << "Max period " << k << endl;
  cin.get();
}

прога выводит 0 когда n=8
должна выводить: 3 т.к. 1/8=0,125
0
S9
Волшебник
648 / 251 / 87
Регистрация: 18.12.2010
Сообщений: 541
19.06.2011, 22:19 #4
Цитата Сообщение от xagxag Посмотреть сообщение
прога выводит 0 когда n=8
должна выводить: 3 т.к. 1/8=0,125
должно быть не 3 а 1, т.к. задание определить длину периода десятичной дроби.
ошибка у меня в том, что k в строке 23 надо присвоить 1
например 1/28 = 0,0357142857142857 правильный ответ 6
Код
0,0357142857142857
      ^----^
        тут 6 знаков
а если выводит 1, то это значит что периода дроби нет (при n = 8 дробь тоже не периодичная)
0
lamed
297 / 297 / 150
Регистрация: 07.05.2011
Сообщений: 592
19.06.2011, 22:24 #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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include <iostream>
#include <cstdlib>
// Дано натуральное число N. Определить длину периода 1/n.
// Период дроби равен периоду в последовательности остатков.
// G++/Code::Blocks
// Сергей Бендер (Pascal), 28.12.2009
// lamed, RFPRO.Ru , 19.06.2011
using namespace std;
int main()
{
    int n,i,j;
    int r;
    int a;
    int ost[255];
 
    cin >> n;
    r=10;
    cout<<"0.";
    while (r<n)
    {
        r*=10;
        cout<<"0";
    }
 
    i=-1;
    do
    {
        i++;
        cout << r/n;
        r%=n;
        ost[i]=r;
        r*=10;
        j=1;
 
        while (ost[j]!=ost[i])
            j++;
    } while (j>=i);
    cout << endl;
    cout << i-j<<endl;
    system("pause");
 
    return 0;
}
0
Viel
0 / 0 / 0
Регистрация: 08.09.2015
06.12.2011, 00:28 #6
а можно полную программу для Pascal? я просто С++ не проходила и полностью программу с правильным выполнением не получается сделать
0
S9
Волшебник
648 / 251 / 87
Регистрация: 18.12.2010
Сообщений: 541
06.12.2011, 01:49 #7
Цитата Сообщение от S9 Посмотреть сообщение
Решение есть здесь, правда в Паскале.
См. пост 2
0
06.12.2011, 01:49
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.12.2011, 01:49
Привет! Вот еще темы с решениями:

Дано число. Разделить каждую цифру десятичной записи этого числа на его порядковый номер. Полученное число нап
2.Дано число. Разделить каждую цифру десятичной записи этого числа на его...

Дано натурально число N. Сколько различных цифр встречается в его десятичной записи?
Дано натуральное число n. Определить количество различных цифр в нем. Например,...

Дано натурально число N. Сколько различных цифр встречается в его десятичной записи?
Ребят, помогите, пожалуйста, с созданием программного кода на С++. Вот,...

Дано натуральное четырехзначное число n. Определить, является ли это число перевертышем
Дано натуральное четырехзначное число n. Определить, является ли это число...


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

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

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