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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.01.2013, 19:35   #11
denrubun
Пользователь
 
Регистрация: 24.12.2012
Сообщений: 82
По умолчанию

ищи логические ошибки в функциях
потести на простых примерах, где результат известен
ну и вообще пиши сюда помогу
denrubun вне форума Ответить с цитированием
Старый 16.01.2013, 22:23   #12
denrubun
Пользователь
 
Регистрация: 24.12.2012
Сообщений: 82
По умолчанию

вобщем сам заинтересовался набацал вот такой код на с++
работает помоему правильно, протести его там в своей системе

Код:
#include <iostream>
#include <cmath>
using namespace std;
int count7(int);

int main(){
	int m, n, result;
	cin >> m >> n;
	result = count7(n) - count7(m-1);
	cout << result << endl;
	system("PAUSE");
	return 0;
};

int count7(int x){
	int result=0, pow10;
	short i;
	bool checked = false;
	while(x>6){
		i = 0;
		pow10 = 1;
		while(x>=pow10){
			pow10 *= 10;
			++i;
		}
		pow10 /= 10;
		--i;
		if(x/pow10==8){
			result += pow10;
			checked = true;
		}
		else if(x/pow10==7){
			if(!checked)
				result += (x%pow10 + 1);
			else
				checked = false;
		}
		result += i*pow(10.0, i-1);
		x -= pow10;
	}
	return result;
};
denrubun вне форума Ответить с цитированием
Старый 17.01.2013, 10:19   #13
Izobara
Форумчанин
 
Аватар для Izobara
 
Регистрация: 26.12.2012
Сообщений: 227
По умолчанию

Встать работу с файлами (какими - смотри в моем коде). А то еще не совсем пойму, как это на с++ — только начал осваивать.
"I believe I can fly" - C++, "What do you want from me" - Delphi, "Yesterday" - Pascal, "Let it be" - C#... Программисты-музыканты-полиглоты поймут
Izobara вне форума Ответить с цитированием
Старый 17.01.2013, 13:36   #14
Somebody
Участник клуба
 
Регистрация: 08.10.2007
Сообщений: 1,185
По умолчанию

denrubun, иногда на единицу отличается: от 1 до 1000 получилось 299 вместо 300.
Вот я тоже попробовал:
Если есть число (AxB), где A и B - последовательности цифр, а x - одна цифра, то в числах от 0 до (AxB) на месте x будет цифра n следующее количество раз:
x < n -> A * 10 ^ length(B)
x = n -> A * 10 ^ length(B) + (B + 1)
x > n -> (A + 1) * 10 ^ length(B)
Код:
#include <fstream>

unsigned CountDigit(unsigned number, unsigned digit = 7)
{
	unsigned result = 0;
	unsigned a = number / 10, x = number % 10, b = 0, pow10 = 1;
	while (a != 0 || x != 0)
	{
		if (x < digit)
			result += a * pow10;
		else if (x == digit)
			result += a * pow10 + (b + 1);
		else /*if (x > digit)*/
			result += (a + 1) * pow10;
		b += x * pow10;
		x = a % 10;
		a /= 10;
		pow10 *= 10;
	}
	return result;
}

int main()
{
	using namespace std;
	ifstream ifs("dig7.dat");
	unsigned m, n;
	ifs >> m >> n;
	ofstream ofs("dig7.sol", ios::out | ios::trunc);
	ofs << CountDigit(n) - CountDigit(m - 1);
}
Somebody вне форума Ответить с цитированием
Старый 17.01.2013, 17:37   #15
Izobara
Форумчанин
 
Аватар для Izobara
 
Регистрация: 26.12.2012
Сообщений: 227
По умолчанию

Somebody, правильно!
"I believe I can fly" - C++, "What do you want from me" - Delphi, "Yesterday" - Pascal, "Let it be" - C#... Программисты-музыканты-полиглоты поймут
Izobara вне форума Ответить с цитированием
Старый 17.01.2013, 18:02   #16
denrubun
Пользователь
 
Регистрация: 24.12.2012
Сообщений: 82
По умолчанию

Somebody, не согласен, у меня получается 300 может какоето различие в компиляторах?
denrubun вне форума Ответить с цитированием
Старый 17.01.2013, 18:56   #17
Somebody
Участник клуба
 
Регистрация: 08.10.2007
Сообщений: 1,185
По умолчанию

Цитата:
Сообщение от denrubun Посмотреть сообщение
Somebody, не согласен, у меня получается 300 может какоето различие в компиляторах?
Потестил сейчас:
Код:
for (int i = 0; i < 10; i++)
		cout << int(i * pow(10.0, i - 1)) << endl;
Результат
Код:
0
1
20
299
4000
49999
600000
7000000
79999999
899999999
С вещественными числами осторожнее надо, ведь даже (int)0.999999999 - это уже 0, а не 1. Для такого случая лучше свою функцию для степени десятки сделать или хотя бы прибавить, например, 0.5, чтобы точно округлилось, куда надо.
Somebody вне форума Ответить с цитированием
Старый 17.01.2013, 19:04   #18
denrubun
Пользователь
 
Регистрация: 24.12.2012
Сообщений: 82
По умолчанию

без понятия как у вас такое вышло. у меня везде нули на концах, протестил только что

Последний раз редактировалось denrubun; 17.01.2013 в 19:07.
denrubun вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вывести количество семерок в числе (Delphi) qpuTuJlb Помощь студентам 8 23.11.2012 22:00
Посчитать сумму всех целых чисел в этом диапазоне LION7777 Фриланс 14 15.06.2010 00:16
в массиве найти количество злементов лежащих в диапазоне от A до B Deniska112 Общие вопросы C/C++ 14 02.06.2009 17:59
вычислить количество элементов массива, лежащих в диапазоне от А до В Gigatrest Паскаль, Turbo Pascal, PascalABC.NET 16 26.01.2009 14:05