Другие языки программирования и технологии

Помогите решить задачу на си++

С клавиатуры вводится натуральное число, не содержащее нулей (отсутствие нулей в числе необходимо проверить). Напишите программу, которая выводит все числа, получающиеся из исходного с использованием левого циклического сдвига цифр числа. Например, если введено число 123, то будут выведены: само число 123, а также, 231 и 312.
#include <iostream>
#include <cmath>

bool havezero(unsigned n) {
bool r = false;
do {
if ( (n % 10) == 0 ) {
r = true;
break;
}
n /= 10;
} while (n);
return r;
}

int main() {
std::cout << "n? ";
unsigned n;
std::cin >> n;
if ( havezero(n) ) {
std::cout << "input error\n";
} else {
int c = log10(n);
int d = pow(10, c);
std::cout << n << std::endl;
for (int i = 0; i < c; ++i) {
n = n % d * 10 + n / d;
std::cout << n << std::endl;
}
}
}
Евгений Никишин
Евгений Никишин
88 896
Лучший ответ
#include <iostream>
#include <locale>

#include <vector>
#include <algorithm>
#include <iterator>

#include <cstdlib>

int main()
{
setlocale(LC_ALL, "");

int i;
std::cin >> i;

std::vector<int> v;

for (; i; i/= 10)
{
int n = i % 10;
if (!n)
{
std::cerr << "null" << std::endl;
return EXIT_FAILURE;
}
v.push_back(n);
}

std::sort(v.begin(), v.end());

do
{
typedef std::ostream_iterator<int> O;

std::copy(v.begin(), v.end(), O(std::cout, " "));
std::cout << std::endl;
} while (std::next_permutation(v.begin(), v.end()));

return EXIT_SUCCESS;
}
Иван Тыщенко
Иван Тыщенко
1 769
// DDD.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"

#include <iostream>

//Функция которая все далет
void DoIt();

int _tmain(int argc, _TCHAR* argv[])
{
static char ansBuf[256];
//Делаем наше все пока не надоест
do
{
DoIt();

std::cout<<"Continue? y/n ";
std::cin>>ansBuf;
}
while(strcmp(ansBuf,"y") ==0 || strcmp(ansBuf,"Y") == 0);

return 0;
}

void DoIt()
{
static char buf[1024];
int len;

//Вводим наше число
std::cout<<"Input number:";
std::cin>>buf;

//запоминаем длинну строки
len = strlen(buf);

//проверяем не пустая ли это строка
if(len < 1)
{
std::cout<<"Input not empty string";
return;
}

//Проверяем что это натуральное число и что оно не содержит нулей
for(int i = 0; i < len ; ++i)
{
if(buf < '1' || buf > '9')
{
std::cout<<"string can't contain symbol "<<buf<i>;
return;
}
}

//Выводим все возможные сдвиги
for(int k = 0; k < len ; k++)
{
std::cout<<"#"<