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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.02.2011, 04:55   #131
Акоб
Форумчанин
 
Регистрация: 10.01.2011
Сообщений: 243
По умолчанию

ок,как дела с твоим кодом?
Акоб вне форума Ответить с цитированием
Старый 03.02.2011, 04:59   #132
Obey-Kun
Линуксоид
Участник клуба
 
Аватар для Obey-Kun
 
Регистрация: 31.07.2009
Сообщений: 1,403
По умолчанию

так написал же ещё одну версию для дебагинга, посмотри
Я схожу с ума или это глючит реальность?
Jabber ID: obey@obey.su
Obey-Kun вне форума Ответить с цитированием
Старый 03.02.2011, 05:02   #133
Акоб
Форумчанин
 
Регистрация: 10.01.2011
Сообщений: 243
По умолчанию

Enter fucking positive number: 1000
1000 - 729 + 1
999 - 729 + 1
i = 3, tmp = 1, dikiy(tmp, i) = 271
1000 - 729 + 1
999 - 729 + 1
Your answer is 271, dumbass.
Press any key to continue

почерму 999???

Последний раз редактировалось Serge_Bliznykov; 03.02.2011 в 08:16.
Акоб вне форума Ответить с цитированием
Старый 03.02.2011, 05:04   #134
Obey-Kun
Линуксоид
Участник клуба
 
Аватар для Obey-Kun
 
Регистрация: 31.07.2009
Сообщений: 1,403
По умолчанию

Понятия не имею, сам офигеваю. По стандарту, приведение double к int должно банально отбросить дробную часть. Что у тебя за компилятор?
Теперь целиком не буду постить. Попробуй так
Код:
    } else if(m == 1) {
        double dn = double(n);
        cout << exp(dn * log(10)) << " - " << exp(dn * log(9)) << " + 1" << endl;
        cout << int(exp(dn * log(10))) << " - " << int(exp(dn * log(9))) << " + 1" << endl;
        cout << floor(exp(dn * log(10))) << " - " << floor(exp(dn * log(9))) << " + 1" << endl;
        return floor(exp(dn * log(10))) - floor(exp(dn * log(9))) + 1;
Я схожу с ума или это глючит реальность?
Jabber ID: obey@obey.su
Obey-Kun вне форума Ответить с цитированием
Старый 03.02.2011, 05:07   #135
Акоб
Форумчанин
 
Регистрация: 10.01.2011
Сообщений: 243
По умолчанию

visual studio 6 :-D
Цитата:
так написал же ещё одну версию для дебагинга, посмотри
?????

Enter fucking positive number: 1000
1000 - 729 + 1
999 - 729 + 1
999 - 729 + 1
i = 3, tmp = 1, dikiy(tmp, i) = 271
1000 - 729 + 1
999 - 729 + 1
999 - 729 + 1
Your answer is 271, dumbass.
Press any key to continue

может там такой вариант при округлении он берет менше чем надо?

Последний раз редактировалось Serge_Bliznykov; 03.02.2011 в 08:17.
Акоб вне форума Ответить с цитированием
Старый 03.02.2011, 05:18   #136
Obey-Kun
Линуксоид
Участник клуба
 
Аватар для Obey-Kun
 
Регистрация: 31.07.2009
Сообщений: 1,403
По умолчанию

я сдаюсь. может, допру, когда отосплюсь и протрезвею.
Я схожу с ума или это глючит реальность?
Jabber ID: obey@obey.su
Obey-Kun вне форума Ответить с цитированием
Старый 03.02.2011, 05:30   #137
Акоб
Форумчанин
 
Регистрация: 10.01.2011
Сообщений: 243
По умолчанию

я кажется понел
все дело в округлении.когда я все сделал float, 1000 - 22, но при 99 проблемы с
assert(m >= 0);
assert(n >= 0 && n < 10);
ты должен отделить цыфры которие 10^n и все остальные.
когда будешь работать с 10^n,то,вместо доубле используй float,когда будешь работать с остальными, ничего не ,меняй.

Последний раз редактировалось Акоб; 03.02.2011 в 05:59.
Акоб вне форума Ответить с цитированием
Старый 03.02.2011, 06:11   #138
Obey-Kun
Линуксоид
Участник клуба
 
Аватар для Obey-Kun
 
Регистрация: 31.07.2009
Сообщений: 1,403
По умолчанию

а можешь модифицировать исходник так, чтобы у тебя всё работало?
Я схожу с ума или это глючит реальность?
Jabber ID: obey@obey.su
Obey-Kun вне форума Ответить с цитированием
Старый 03.02.2011, 06:27   #139
Акоб
Форумчанин
 
Регистрация: 10.01.2011
Сообщений: 243
По умолчанию

сейчас нет))
спать охота))

Код:
#include <iostream>
#include <cmath>
#include <cassert>

using namespace std;

/// Количество чисел с единичкой в промежутке [1; m*10^n]
float dikiy(int m, int n)
{
    assert(m >= 0);
    assert(n >= 0 && n < 10);
    if(m == 0) {
        return 0;
    } else if(n == 0) {
        return 1; 
    } else if(m == 1) {
        double dn = double(n);
        cout << float(exp(dn * log(10))) << " - " << exp(dn * log(9)) << " + 1" << endl;
        cout << float(exp(dn * log(10))) << " - " << int(exp(dn * log(9))) << " + 1" << endl;
        cout << float(exp(dn * log(10))) << " - " << float(exp(dn * log(9))) << " + 1" << endl;
        return float(exp(dn * log(10))) - int(exp(dn * log(9))) + 1;
  } else {
        int tmp = dikiy(1, n);
        return tmp + (m - 2) * (tmp - 1) + pow(10, n) - 1;
    }
}

/// Количество чисел с единичкой в промежутке [1; x]
int fuckingFunc(int x)
{
    assert(x > 0);
    int result = 0;
    for(int i = log10(x); i >= 0; --i) {
        int tmp = x / pow(10, i);
        cout << "i = " << i << ", tmp = " << tmp << ", dikiy(tmp, i) = " << dikiy(tmp, i) << endl;
        x -= tmp * pow(10, i);
        result += dikiy(tmp, i);
        if(tmp == 1) {
            /* если текущая цифра -- 1, добавляем остаток к результату и всё,
             * ведь при реальном счёте всё в остатке начиналось бы на 1 */
            result += x;
            break;
        }
        
    }
    return result;
}

int main()
{
    int x;
    do {
        cout << "Enter fucking positive number: ";
        cin >> x;
    } while(x < 1);
    
    int result = fuckingFunc(x);
    
    cout << "Your answer is " << result << ", dumbass." << endl;
}
все пучком)))))))))))

Последний раз редактировалось Акоб; 03.02.2011 в 08:54.
Акоб вне форума Ответить с цитированием
Старый 03.02.2011, 10:31   #140
NiCola999
Не
Участник клуба
 
Регистрация: 29.10.2009
Сообщений: 1,456
По умолчанию

Цитата:
Ха, что за дьявольщина? На моём калькуляторе 1000 - 729 + 1 получается 272)))
дело в том, что когда ты округляешь до int, округление идет в большую сторону, т.е например, если у тебя получилось число 4,8 то после приведения будет 4, отсюда и ошибка


выхлоп проги с поста #143
начиная с 1000
Код:
N: 3000
Errors: 1271
1000 - 729 + 1
1000 - 729 + 1
1000 - 729 + 1
i = 3, tmp = 2, dikiy(tmp, i) = 1271
1000 - 729 + 1
1000 - 729 + 1
1000 - 729 + 1
100 - 81 + 1
100 - 81 + 1
100 - 81 + 1
i = 2, tmp = 9, dikiy(tmp, i) = 252
100 - 81 + 1
100 - 81 + 1
100 - 81 + 1
10 - 9 + 1
10 - 9 + 1
10 - 9 + 1
i = 1, tmp = 9, dikiy(tmp, i) = 18
10 - 9 + 1
10 - 9 + 1
10 - 9 + 1
i = 0, tmp = 9, dikiy(tmp, i) = 1

Последний раз редактировалось NiCola999; 03.02.2011 в 17:23.
NiCola999 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
подсчитать количество слов, в которые входит символ "е" Zhasik Паскаль, Turbo Pascal, PascalABC.NET 3 27.12.2010 10:29
Подсчитать количество букв "А" в предложении и общее количество букв.В тексте из файла несколько строк. kvas91 Общие вопросы C/C++ 3 14.11.2010 16:51
Как обойти "преобразование типа из "string" в "float" невозможно" lexluter1988 Помощь студентам 1 07.08.2010 12:23
при вводе на листе "магазин"- код товара появлялось "описание" товара из "склада" с "продажной ценой" aleksei78 Microsoft Office Excel 13 25.08.2009 12:04