Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Задача на C++

Александр Ханбеков Ученик (133), закрыт 2 месяца назад
Симметричное число
Дано целое неотрицательное число, меньшее 10000
Если число имеет меньше 4 знаков в десятичной записи, то нужно считать, что его десятичная запись дополняется слева незначащими нулями (например, число 120 дополняется до 0120 ). Определите, является ли десятичная запись числа симметричной.

Входные данные
Дано целое неотрицательное число, меньшее 10000

Выходные данные
Если число симметричное, то выведите 1
в противном случае выведите любое другое целое число.

#include <iostream>
using namespace std;
int main() {
int x;
dq = x % 10;
x = x / 10;
dw = x % 10;
x = x / 10;
de = x % 10;
x = x / 10;
dr = x;
left = dr * 10 + de;
right = dq * 10 + dw;
cout << left - right + 1 << endl;
return 0;
}
выдает ошибку(
Лучший ответ
Николай Веселуха Высший разум (366399) 3 месяца назад
 #include  
#include

using namespace std;

bool is_symmetrical(unsigned value, const size_t length) {
const auto str = to_string(value);
const auto size = str.length();
if (size > length) return false;
string number{ "0000" };
if (size != length) number.replace(length - size, size, str);
else number = str;
return number == string{ number.crbegin(), number.crend() };
}

int main() {
constexpr size_t length = 4;
while (true) {
cout << ">>> ";
unsigned value;
cin >> value;
cout << "<<< ";
puts(is_symmetrical(value, length) ? "YES" : "NO");
}
}
Остальные ответы
Милана Просветленный (32580) 3 месяца назад
Ваш код содержит несколько ошибок, которые мешают его корректной работе. Во-первых, вы не проверяете, сколько цифр содержит число, и не обрабатываете случай, когда число имеет меньше четырех цифр. Во-вторых, переменные `dq`, `dw`, `de`, `dr` не используются правильно для проверки симметричности числа. Вот исправленная версия программы:

 #include  
#include // Для работы с строками
using namespace std;

bool isSymmetric(int number) {
string strNumber = to_string(number); // Преобразуем число в строку
int left = 0;
int right = strNumber.length() - 1;

// Проверяем, является ли строка симметричной
while (left < right) {
if (strNumber[left] != strNumber[right])
return false;
left++;
right--;
}
return true;
}

int main() {
int x;
cin >> x;

// Проверяем, является ли число симметричным
if (isSymmetric(x))
cout << 1 << endl;
else
cout << 0 << endl; // Вместо "любого другого числа" выводим 0

return 0;
}
Александр ХанбековУченик (133) 3 месяца назад
там нельзя с циклом while :(
Милана Просветленный (32580) Александр Александр,
 #include  
#include  
using namespace std; 
 
bool isSymmetric(int number) { 
    string strNumber = to_string(number); 
    int length = strNumber.length(); 
 
    // Используем одну итерацию для проверки симметричности 
    for (int i = 0; i < length / 2; ++i) { 
        if (strNumber[i] != strNumber[length - i - 1]) 
            return false; 
    } 
    return true; 
} 
 
int main() { 
    int x; 
    cin >> x; 
 
    if (isSymmetric(x)) 
        cout << 1 << endl; 
    else 
        cout << 0 << endl; 
 
    return 0; 
} 
Александр ХанбековУченик (133) 3 месяца назад
Все задачи необходимо решать, используя только операторы присваивания и операции целочисленной арифметики. Решения, использующие другие конструкции языка или функции, будут отмечаться неверными. Вот так пишет.
Андрей Высший разум (450720) 3 месяца назад
 int n;
cin >> n;
cout << (n % 10 == n / 1000 && n / 10 % 10 == n / 100 % 10);
Выводит 1, если число симметричное и 0, если нет.
Похожие вопросы