Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> E2096 
V
    Опции темы
asdf
Дата 25.12.2005, 19:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 144
Регистрация: 27.8.2004
Где: Кишинёвъ

Репутация: нет
Всего: 11



Код
#include <iostream>
#include <cstring>

using namespace std;

string tos(int a) { char cha[32]; sprintf(cha, "%d", a); return string(cha); }

int N, K;

class Big
{
public:
    string str;
    Big() {
        str="";
    }
    Big(string a): str(a) {
    }
    Big(int a) {
        char arr[20];
        strcpy(arr, tos(a).c_str());
        str=strrev(arr);
    }
    void operator=(Big a) {
        str=a.str;
    }
    void operator=(int a) {
        char arr[20];
        strcpy(arr, tos(a).c_str());
        str=strrev(arr);
    }
    string out() {
        char arr[200];
        strcpy(arr, str.c_str());
        return strrev(arr);
    }
} ;

Big operator+(Big& a, Big& b) {
    Big res;
    int s=min(a.str.size(), b.str.size());
    int zap=0;
    int val;
    for ( int i=0; i<s; i++ ) {
        val=a.str[i]+b.str[i]-'0'+zap;
        res.str += val-((val>=K)?((zap=1),K):(zap=0));
    }
    int k;
    string &ref=(a.str.size()>b.str.size())?a.str:b.str;
    k=ref.size();
    for ( int i=s; i<k; i++ ) {
        val=ref[i]+zap;
        res.str += val-((val>=K)?((zap=1),K):(zap=0));
    }
    if ( zap != 0 ) {
        res.str += zap + '0';
    }
    return res;
}

Big operator*(int a, Big& b) {
    Big res;
    int s=b.str.size();
    int zap=0;
    int val;
    for ( int i=0; i<s; i++ ) {
        val=b.str[i]*a+zap;
        res.str += val%K;
        zap=val/K;
    }
    if ( val != 0 ) {
        res.str += val+'0';
    }
    return res;
}

int main() {
    Big m[181];
    cin >> N >> K;
    m[1]=K-1;
    m[2]=(K-1)*K;
    for ( int i=3; i<=N; i++ ) {
        m[i]=(K-1)*(m[i-2]+m[i-1]);
    }
    cout << m[N].out();
    return 0;
}


Цитата
Error E2096 D:\acm\1012.cpp 83: Illegal structure operation in function main()



smile
--------------------
... 
PM MAIL   Вверх
LPBOY
Дата 25.12.2005, 21:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 228
Регистрация: 12.7.2005

Репутация: 20
Всего: 20



Временный объект нельзя передавать по неконстантной ссылке, поэтому твой оператор*
Big operator*(int a, Big& b)
не катит smile так как сумма m[i-2]+m[i-1] дает временный объект
Сделай так:
Big operator*(int a, const Big& b)
--------------------
Каждый человек по-своему прав, а по-моему нет...
PM MAIL   Вверх
threef
Дата 26.12.2005, 18:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 375
Регистрация: 27.10.2005
Где: Запорожье

Репутация: 9
Всего: 10



Большие цифры буквами ? Ну-ну.
У меня все работает:

Код


#include <iostream>
#include <cstring>
[b]#include <string>[/b]

using namespace std;
[b]#define min(A,B) ((A)<(B)?(A):(B))[/b]
string tos(int a) 
{ char cha[32]; sprintf(cha, "%d", a); return string(cha); }

int N, K;

class Big
{
public:
    string str;
    Big() {
        str="";
    }
    Big(string a): str(a) {
    }
    Big(int a) {
        char arr[20];
        strcpy(arr, tos(a).c_str());
        str=strrev(arr);
    }
    void operator=(Big a) {
        str=a.str;
    }
    void operator=(int a) {
        char arr[20];
        strcpy(arr, tos(a).c_str());
        str=strrev(arr);
    }
    string out() {
        char arr[200];
        strcpy(arr, str.c_str());
        return strrev(arr);
    }
} ;

Big operator+(Big& a, Big& b) {
    Big res;
    int s=min(a.str.size(), b.str.size());
    int zap=0;
    int val,i;
    for ( i=0; i<s; i++ ) {
        val=a.str[i]+b.str[i]-'0'+zap;
        res.str += val-((val>=K)?((zap=1),K):(zap=0));
    }
    int k;
    string &ref=(a.str.size()>b.str.size())?a.str:b.str;
    k=ref.size();

    for (i=s; i<k; i++ ) {
        val=ref[i]+zap;
        res.str += val-((val>=K)?((zap=1),K):(zap=0));
    }
    if ( zap != 0 ) {
        res.str += zap + '0';
    }
    return res;
}

Big operator*(int a, Big& b) {
    Big res;
    int s=b.str.size();
    int zap=0;
    int val;
    for ( int i=0; i<s; i++ ) {
        val=b.str[i]*a+zap;
        res.str += val%K;
        zap=val/K;
    }
    if ( val != 0 ) {
        res.str += val+'0';
    }
    return res;
}

int main() {
    Big m[181];
    cin >> N >> K;
    m[1]=K-1;
    m[2]=(K-1)*K;
    for ( int i=3; i<=N; i++ ) {
        m[i]=(K-1)*(m[i-2]+m[i-1]);
    }
    cout << m[N].out();
    return 0;
}


PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0418 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.