Задача “Игра” C++

129
03 апреля 2019, 12:50

Условие задачи на картинке. Код что я написал ниже: Почему-то всегда если ввожу большое число(около 1 * 10^10) выдает результат 17:174

Не могу понять в чем ошибка, помогите пожалуйста.

#include <iostream>
#include <fstream>
using namespace std;
int main() {
long int a = 0, b = 0, n = 0, x = 0, z = 0;
ifstream inp;
ofstream otp;
inp.open("input.txt");
otp.open("output.txt");
inp >> n;
x = n;
z = 1;
if (n % 2 == 0) {
    while (x > 0) {
        if (z % 2 == 0) {
            b += x % 10;
        }
        else {
            a += x % 10;
        }
        z += 1;
        x /= 10;
    }
}
else {
    while (x > 0) {
        if (z % 2 == 0) {
            a += x % 10;
        }
        else {
            b += x % 10;
        }
        z += 1;
        x /= 10;
    }
}
a = abs(a);
b = abs(b);
if (n % 2 == 0) {
    a = a * 2;
}
else if(n % 2 != 0) {
    b = b * 3;
}
if (n < 0) {
    a = a * 3;
}
else if(n > 0) {
    b = b * 2;
}
otp << a << ':' << b;
return 1;

}

Answer 1

Вам нужно работать с вводимым числом как со строкой. Это число само не принимает участия в вычислениях, только суммы некоторых его цифр. А эти суммы будут в очень разумных пределах...

string s;
inp >> s;
bool neg = false;
if (s[0] == '-') 
{
    neg = true;
    s = s.substr(1);
}

и вперед...

Update

Исправленный ваш код (разберитесь сами, что к чему):

#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main() {
    long int a = 0, b = 0;
    bool neg = false;
    string n;
    ifstream inp;
    ofstream otp;
    inp.open("input.txt");
    otp.open("output.txt");
    inp >> n;
    if (n[0] == '-') {
        neg = true;
        n = n.substr(1);
    }
    for (int i = 1; i < n.length(); i+=2) a += n[i]-'0';
    for (int i = 0; i < n.length(); i+=2) b += n[i]-'0';
    if ((n[n.length()-1]-'0') % 2 == 0)
        a = a * 2;
    else
        b = b * 3;
    if (neg)
        a = a * 3;
    else
        b = b * 2;
    otp << a << ':' << b;
}
Answer 2

Вы вводите число 10 млрд. Посмотрите сколько вмещает в себя тип long int. У Вас переполняется переменная.

READ ALSO
С3863: Тип массива char[64] является неоднозначным

С3863: Тип массива char[64] является неоднозначным

Примитивная программа, при компилировании которой выходит две ошибки:

135
Создание самостоятельного файла в Clion

Создание самостоятельного файла в Clion

Пытаюсь создать exe файл через ClionНо при запуске exe файла, выдает ошибку о нехватке dll файла

136
Свет в 2d играх

Свет в 2d играх

Балуюсь созданием своего движка и игр под него и встал такой вопрос: как правильно сделать осещение? Методом умозаключений, проб и ошибок,...

140
Как найти кратчайшый путь от заданой вершины ко всем другим?

Как найти кратчайшый путь от заданой вершины ко всем другим?

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

169