Почему код не работает как надо? с++ - Вопросы по С+

Вопрос Почему код не работает как надо? с++

Регистрация
14 Авг 2013
Сообщения
88
Репутация
0
Спасибо
0
Монет
0
Кому не лень, почему не работает? Должен принимать последовательность чисел, а потом выдавать её наоборот #include <iostream>



using namespace std;



int main() {



int a; //числа которые мы вводим

int n = 1; // сдвигает влево следующие числа в inf

int k = 0; // n = 10^k и так далее

int p = 1; // сдвигает влево числа в step

int l; //с помощью неё находим кол-во цифр в а

int inf = 0; // сюда записываем последовательность чисел

int step = 0; // покажет как делить inf чтобы получить последовательность



cin >> a;

while (a != 0) {

k = 0;

l = a;

while (l != 0) {

l = l/10;

k++;

}

inf += a * n;

n *= 10 ^ k;

step += k * p;

p *= 10;

cin >> a;

}



int h = 1; //помогает делить step



while (inf != 0) {

cout << inf % (10 ^ (step % 10 ^ h)) << endl;

h++;

}



return 0;

}
 
Регистрация
2 Авг 2013
Сообщения
70
Репутация
0
Спасибо
0
Монет
0
А как такой код может выйти из последнего цикла, когда там переменная `inf` не обновляется? ?
 
Регистрация
26 Мар 2013
Сообщения
99
Репутация
21
Спасибо
1
Монет
0
я щас исправлю код погоди я потом изменю коммент: проблемы оператора ^ xor замени на pov из math а готовый код: #include <iostream>
#include <cmath> // для pow

using namespace std;

int main() {
int a;
int n = 1;
int k = 0;
int p = 1;
int l;
int inf = 0;
int step = 0;

cin >> a;
while (a != 0) {
k = 0;
l = a;
while (l != 0) {
l = l / 10;
k++;
}
inf += a * n;
n *= pow(10, k);
step += k * p;
p *= 10;
cin >> a;
}

int h = 1;

while (inf != 0) {
cout << inf % (int)pow(10, step % 10 * h) << endl;

inf /= (int)pow(10, step % 10 * h);
h++;
}

return 0;
}
 
Регистрация
12 Сен 2013
Сообщения
71
Репутация
0
Спасибо
0
Монет
0
Исходный код: #include <iostream>
#include <vector>

int main( int argc, char* argv[] )
{
// Вектор для хранения последовательности чисел типа long
std::vector<long> lseq;
std::string s;
bool flag = true;
size_t end;
std::cout << "Введите последовательность чисел:" << std::endl;
while( flag )
{
try
{
std::getline( std::cin, s );
if( s.length() > 0 )
{
// Преобразуем строку в число
long l = std::stol( s, &end, 0 );
if( end < s.length() )
{
throw( std::invalid_argument("") );
}
// Сохраним число в векторе
lseq.push_back( l );
}
else
{
flag = false;
}
}
catch( const std::eek:ut_of_range& oor )
{
std::cerr << "Значение вне диапазона!" << std::endl;
}
catch( const std::invalid_argument& ia )
{
std::cerr << "Введен мусор!" << std::endl;
}
catch( const std::bad_alloc& ba )
{
std::cerr << "Ошибка выделения памяти!" << std::endl;
}
}

std::cout << "Последовательность чисел в обратном порядке:" << std::endl;
for( auto r_it = lseq.rbegin(); r_it != lseq.rend(); r_it++ )
{
std::cout << *r_it << std::endl;
}

return 0;
} Результат работы: Введите последовательность чисел:
2
3
qwert
Введен мусор!
123qwe
Введен мусор!
4
123

Последовательность чисел в обратном порядке:
123
4
3
2
 
Сверху Снизу