Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.10.2010, 20:52   #1
boomeer
Форумчанин
 
Аватар для boomeer
 
Регистрация: 04.08.2010
Сообщений: 110
По умолчанию код

Код:
cin>>N;

cn=0;
L=1;
while (++L<=N){
if (L<=N){
i=0;
        do {cn+= ms[i]*L;
        ms[i]=(unsigned short)(cn%10000);
        cn/= 10000;} while (++i<len || cn);
len= i;
} };

cout<<ms[len-1];

for(i= len-1; i--;)
        {
        cout<< ms[i];
        }
данный код вычисляет факториал длинных чисел. Может кто откоментировать код? написан не мной. Не совсем понятен.

Последний раз редактировалось boomeer; 07.10.2010 в 21:43.
boomeer вне форума Ответить с цитированием
Старый 08.10.2010, 01:40   #2
ghost1st
Пользователь
 
Регистрация: 01.01.2010
Сообщений: 14
По умолчанию

Цитата:
Сообщение от boomeer Посмотреть сообщение
Код:
cin>>N;

cn=0;
L=1;
while (++L<=N){
if (L<=N){
i=0;
        do {cn+= ms[i]*L;
        ms[i]=(unsigned short)(cn%10000);
        cn/= 10000;} while (++i<len || cn);
len= i;
} };

cout<<ms[len-1];

for(i= len-1; i--;)
        {
        cout<< ms[i];
        }
данный код вычисляет факториал длинных чисел. Может кто откоментировать код? написан не мной. Не совсем понятен.
Код:
cin>>N; // Принимаем число

cn=0; // Счетчик
L=1;   // минимальный факториал
while (++L<=N) // пока следующее число меньше введенного
{
    if (L<=N) если L меньше или равно N
    {
    i=0; // i равно 0

    do  // делать
    {
        cn+= ms[i]*L; 
        ms[i]=(unsigned short)(cn%10000);
        cn/= 10000;
    } while (++i<len || cn);

    len= i;
    } 
};

cout<<ms[len-1];

for(i= len-1; i--;)
    {
        cout<< ms[i];
    }
а вот дальше идет бред полный, т.к. ты что-то не то скопировал!!!
ghost1st вне форума Ответить с цитированием
Старый 08.10.2010, 07:22   #3
boomeer
Форумчанин
 
Аватар для boomeer
 
Регистрация: 04.08.2010
Сообщений: 110
По умолчанию

Цитата:
Сообщение от ghost1st Посмотреть сообщение
а вот дальше идет бред полный, т.к. ты что-то не то скопировал!!!
Дак работает!

Последний раз редактировалось boomeer; 08.10.2010 в 07:46.
boomeer вне форума Ответить с цитированием
Старый 08.10.2010, 11:14   #4
blob
Пользователь
 
Регистрация: 24.08.2010
Сообщений: 34
По умолчанию

не..не работает
blob вне форума Ответить с цитированием
Старый 08.10.2010, 11:29   #5
blob
Пользователь
 
Регистрация: 24.08.2010
Сообщений: 34
По умолчанию

а так вроде работает
Код:
           unsigned short ms[100]; // сколько цифр в числе максимум
	for(int i=0; i<100; ms[i++]=0); // обнуляем
	ms[0]=1; // начальное значение
	int N, len=1; //длина результата
	cin>>N; // ввод желаемого факториала

	int cn=0; // временная сумма для переноса разряда
	int L=1;   // старт
	while (++L<=N) // сам цикл переббора от 1 до N
	{
		i=0; // индекс в результате
		do  
		{ 
			cn+= ms[i]*L; // умножаем цифру числа на счётчик
			ms[i]=(unsigned short)(cn%10); // последнюю цифру в результат
			cn/= 10; // обрезаем для переноса разряда
		} while (++i<len || cn); // пока переноса не будет

		len= i; //новая длина числа
	};
           // вывод числа в консоль
	cout<<ms[len-1];

	for(i= len-1; i--;)
		{
			cout<< ms[i];
		}
	return 0;

Последний раз редактировалось blob; 08.10.2010 в 11:52.
blob вне форума Ответить с цитированием
Старый 08.10.2010, 12:08   #6
boomeer
Форумчанин
 
Аватар для boomeer
 
Регистрация: 04.08.2010
Сообщений: 110
По умолчанию

Цитата:
Сообщение от blob Посмотреть сообщение
а так вроде работает
Код:
           unsigned short ms[100]; // сколько цифр в числе максимум
	for(int i=0; i<100; ms[i++]=0); // обнуляем
	ms[0]=1; // начальное значение
	int N, len=1; //длина результата
	cin>>N; // ввод желаемого факториала

	int cn=0; // временная сумма для переноса разряда
	int L=1;   // старт
	while (++L<=N) // сам цикл переббора от 1 до N
	{
		i=0; // индекс в результате
		do  
		{ 
			cn+= ms[i]*L; // умножаем цифру числа на счётчик
			ms[i]=(unsigned short)(cn%10); // последнюю цифру в результат
			cn/= 10; // обрезаем для переноса разряда
		} while (++i<len || cn); // пока переноса не будет

		len= i; //новая длина числа
	};
           // вывод числа в консоль
	cout<<ms[len-1];

	for(i= len-1; i--;)
		{
			cout<< ms[i];
		}
	return 0;
Хм, спасибо. Можете еще объяснить, что делает ЭТО
Код:
(unsigned short)(cn%10)
конкретно ансигн шорт
boomeer вне форума Ответить с цитированием
Старый 08.10.2010, 12:54   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Это приведение типа. Т.е. вычисляется остаток от деления cn на 10, и результат берется как беззнаковое число.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 08.10.2010, 13:33   #8
boomeer
Форумчанин
 
Аватар для boomeer
 
Регистрация: 04.08.2010
Сообщений: 110
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Это приведение типа. Т.е. вычисляется остаток от деления cn на 10, и результат берется как беззнаковое число.
зачем в данном месте приведение в беззнаковое короткое?..
boomeer вне форума Ответить с цитированием
Старый 08.10.2010, 13:56   #9
blob
Пользователь
 
Регистрация: 24.08.2010
Сообщений: 34
По умолчанию

В принципе можно и без, просто массив именно такого типа.
blob вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нада описать код програми, кто может помочь очень буду благодарен!!! Programmer20101 Помощь студентам 0 12.05.2010 21:15
адаптировать данный код 555shiro Помощь студентам 0 09.01.2010 17:50
Почему не работает данный код? C# byte916 Помощь студентам 4 11.12.2009 21:19
Код сортировки чисел medved6216 Помощь студентам 5 28.10.2009 12:07
Почему данный код не создаёт кнопку на форме VovanZ Общие вопросы Delphi 7 23.05.2009 17:42