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

Нужно исправить ошибку - C++

Восстановить пароль Регистрация
 
Serega1
0 / 0 / 0
Регистрация: 03.11.2009
Сообщений: 68
21.05.2010, 10:20     Нужно исправить ошибку #1
Здравствуйте уважаемые форумчане.
Не молчите пожалуйста, ответьте хоть кто-нибудь. Сколько писал никто не отвечает. Может потому что вопросы слишком простые, но все же хоть что-то ответьте.
Нужно подправить следующий код:

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
#include "stdafx.h"
#include "iostream"
#include "math.h"
#include "conio.h"
 
using namespace std;
 
int fact(int n)
{
  int factorial=1;
  for(int i=1; i<=n; i++)
   factorial=factorial*i;
  return factorial;
}
 
void mult(int factorial ,int i)
{
    int size2=0;
    int temp = factorial;
    int size = 0;
    int j;
    
    do // находим кол - во цифр в числе
    {
     temp /= 10;
     ++size;
    }
    while(temp>0);
     int *razb_fac = new int[size];
     for(j = 0; j<size; ++j ) // разбиваем
     { 
      razb_fac[j] = factorial % 10;
      factorial /= 10;
     }
     int *rez_mas = new int[size2];
     int carry = 0;
     int k=0;
     for (k; k < size; k++)
     {
        carry=carry+ razb_fac[k] * i;
        rez_mas[k] = carry % 10;
        carry /= 10;
        cout<<rez_mas[k]<<"  ";
     } 
}
 
int _tmain(int argc, _TCHAR* argv[])
{
 int n,i,rez,rez2;
 cout<<"Enter n:";
 cin>>n;
 if(n<=10)
 {
  rez=fact(n);
  cout<<"Factorial "<<n<<" this "<<rez;
 }
 if(n>10)
 {
  int factorial=1;
  for(i=1; i<=10; i++)
  factorial=factorial*i;
  mult(factorial,i);
 }
getch();
return 0;
}
Добавлено через 26 минут
Поясню, я считаю факториал, если меньше 10, то обычным способом. А если больше 10, то считаю до 10! и результат передаю в процедуру, для дальнейшего домножения и вывода результата.
Проблема в том, что выводит результат задом наперед и срезает первую цифру. Исправьте пожалуйста, если можете и имеете свободное время.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.05.2010, 10:20     Нужно исправить ошибку
Посмотрите здесь:

C++ Нужно исправить ошибку в коде!
C++ Нужно исправить ошибку
нужно исправить ошибку в коде C++
Нужно исправить ошибку C++
Нужно исправить ошибку C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
edd
36 / 36 / 0
Регистрация: 13.05.2010
Сообщений: 81
21.05.2010, 10:44     Нужно исправить ошибку #2
конечно задом ведь ты выводишь значения из массива от 0 и до упора, вот оно с конца числа и печатает, а срезанная цифра вероятно находится в другом массиве, и зачем на 10 делить?
Serega1
0 / 0 / 0
Регистрация: 03.11.2009
Сообщений: 68
21.05.2010, 11:02  [ТС]     Нужно исправить ошибку #3
edd
Привет, спасибо за ответ. Заранее извини за кривокод
задом ведь ты выводишь значения из массива от 0 и до упора
Ну в цикле начал выводить с size-1 до size ничего не выводит

зачем на 10 делить
Удаляет в числе младший разряд
edd
36 / 36 / 0
Регистрация: 13.05.2010
Сообщений: 81
21.05.2010, 11:27     Нужно исправить ошибку #4
если факт больше 100 то делением на 10 мы не обойдемся,,,, для вывода организуй отдельный цикл за пределами цикла j , от size до нуля, и еще прилепи свой остаток от деления на 10, и size2 вижу только 0

Добавлено через 20 минут
а вообще оно так работать не будет, нужно использовать вектора ибо каждый раз вычисляются новы числа и их нужно куда то заносить и всё сохранять, что бы можно было след проход изобразить, я так делал если интересно выложу,,
Serega1
0 / 0 / 0
Регистрация: 03.11.2009
Сообщений: 68
21.05.2010, 11:34  [ТС]     Нужно исправить ошибку #5
если факт больше 100 то делением на 10 мы не обойдемся
Мне хотя бы 100 пока научиться, потом буду совершенствовать

для вывода организуй отдельный цикл не в функции от size до нуля, и еще прилепи свой остаток от деления на 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
#include "stdafx.h"
#include "iostream"
#include "math.h"
#include "conio.h"
 
using namespace std;
 
int fact(int n)
{
  int factorial=1;
  for(int i=1; i<=n; i++)
   factorial=factorial*i;
  return factorial;
}
 
int mult(int factorial ,int i)
{
    int size2=0;
    int temp = factorial;
    int size = 0;
    int j;
    do
    {
     temp /= 10;
     ++size;
    }
    while(temp>0);
     int *razb_fac = new int[size];
     for(j = 0; j<size; ++j ) 
     { 
      razb_fac[j] = factorial % 10;
      factorial /= 10;
     }
     return razb_fac[j];
}
 
int _tmain(int argc, _TCHAR* argv[])
{
 int n,i,rez,rez2;
 int size2=0,carry=0,size=0;
 int *rez_mas = new int[size2];
 cout<<"Enter n:";
 cin>>n;
 if(n<=10)
 {
  rez=fact(n);
  cout<<"Factorial "<<n<<" this "<<rez;
 }
 if(n>10)
 {
  int factorial=1;
  for(i=1; i<=10; i++)
  factorial=factorial*i;
  rez2=mult(factorial,i);
  for (int j=size; j >0; j--)
  {
   carry=carry+ rez2 * i;
   rez_mas[j] = carry % 10;
   cout<<rez_mas[j]<<"  ";
  }
 }
getch();
return 0;
}
edd
36 / 36 / 0
Регистрация: 13.05.2010
Сообщений: 81
21.05.2010, 11:47     Нужно исправить ошибку #6
Серега число постоянно увеличивается значит: его нужно где то хранить , либо нужно каждый раз тупо создавать больший массив и в него копировать старые элементы что накладно, либо использовать вектора, а у тебя этот момент не реализован,,,
Yandex
Объявления
21.05.2010, 11:47     Нужно исправить ошибку
Ответ Создать тему
Опции темы

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