Условие задачи на картинке. Код что я написал ниже: Почему-то всегда если ввожу большое число(около 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;
}
Вам нужно работать с вводимым числом как со строкой. Это число само не принимает участия в вычислениях, только суммы некоторых его цифр. А эти суммы будут в очень разумных пределах...
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;
}
Вы вводите число 10 млрд. Посмотрите сколько вмещает в себя тип long int. У Вас переполняется переменная.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Какие существуют виды рекламных бордов и как выбрать подходящий?
Примитивная программа, при компилировании которой выходит две ошибки:
Пытаюсь создать exe файл через ClionНо при запуске exe файла, выдает ошибку о нехватке dll файла
Балуюсь созданием своего движка и игр под него и встал такой вопрос: как правильно сделать осещение? Методом умозаключений, проб и ошибок,...
Дано n точек, и координату вершины с какой начинаем, найти кратчайший путь, для обхода всех точек от заданой, и также вернутся назад к нейТак...