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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 31.03.2008, 20:11   #1
Bo2nik
 
Регистрация: 12.03.2008
Сообщений: 4
По умолчанию Число Армстронга. Язык Си.

Написал прогу по вычислению числа Армстронга, только выводит одну единицу, укажите где ошибка.
Код:
#include "stdafx.h"
#include <stdio.h>

main()
{
	int n;
	int ch,arm;
	int k,s,st,b,i;
	s = 0;
	st= 0;
	for (i = 1; i < 100; i++)
	{
		n = i;
		while (n > 0) // вычисляем сумму цифр(s), находим кол-во цифр(st)
		{
			k = n % 10; 
			n = n / 10;
			s+=k;
			st++;
		}
		
		b = st;
		arm = 1;
		while (b > 0) // возводим сумму цифр(s) в степень(st)
		{
			arm = s * arm;	
			b--;
		}
		if (arm == i)    // если s в степени st = заданному числу(i), то выводим i. 
		{
			printf("Chislo armstronga: %d\n",i);
		}
	}	
}

Последний раз редактировалось Bo2nik; 31.03.2008 в 20:13.
Bo2nik вне форума Ответить с цитированием
Старый 31.03.2008, 21:20   #2
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

Обнулять нужно внутри цикла:

Код:
    for (i = 1; i < 100; i++)  
    { 
      s = 0;  
      st= 0;  
...
alexBlack вне форума Ответить с цитированием
Старый 31.03.2008, 21:41   #3
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

Неправильно Вы считаете - не сумму цифр нужно возводить в степень, а отдельные цифры и потом складывать, плюс переменные на новых проходах цикла не обнуляются.
Код:
#include <stdio.h>

#define BASE 10

int main()
{
	int unsigned 	N;
	int unsigned	test, test1;
	
	char 			Digits[16];		// В предположении, что 16 цифр для int нам точно хватит
	char			nDigitCount;
	char			i, j;
	
	for(N = 1; N < 10000; N++){
		nDigitCount = 0;
		test = N;
		while(test > 0){
			Digits[nDigitCount ++] = test % BASE;
			test /= BASE;
		}
		test = 0;
		for(i = 0; i < nDigitCount; i++) {
			test1 = 1;
			// возводим в степень
			for(j = 0; j < nDigitCount; j++) test1 *= Digits[i];
			// складываем с предыдущим
			test += test1;
		}
		
		if(N == test) printf("N=%d\n", N);
	}
	getchar();
	return 0;
}
B_N вне форума Ответить с цитированием
Старый 01.04.2008, 12:26   #4
Bo2nik
 
Регистрация: 12.03.2008
Сообщений: 4
По умолчанию

Цитата:
Сообщение от B_N Посмотреть сообщение
Неправильно Вы считаете - не сумму цифр нужно возводить в степень, а отдельные цифры и потом складывать, плюс переменные на новых проходах цикла не обнуляются.
Мне так препод сказала, у меня даже в тетради задача написана: сумма цифр возведенная в степень n(количество цифр). Но я её переспрошу, может я её не так понял.
За исправления всем спасибо.
Bo2nik вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Найти и вывести все слова,у котоpых число гласных букв пpевышает число согласных. Briz Помощь студентам 2 11.05.2008 00:56
Ввести число N и определить делится ли оно без остатка на число M (VBA) Ivanich Microsoft Office Excel 7 24.04.2008 19:43
язык Си, задача - переводим в 16-й код, старшие три бита интерпретируем как некое число n drossel Помощь студентам 5 02.03.2008 17:24
Язык SunKnight Общие вопросы Delphi 9 29.02.2008 20:16
Число N, заменить одну из его цифр, чтобы получилось число, max близкое к некоторой степени двойки urgu_st Помощь студентам 13 23.10.2007 09:14