Как получить первые четыре элемента из переменной целого типа на СИ?

У меня есть переменная типа int: int pin = 54654346; И я хочу получить из этой переменной первые 4 цифры. Как это реализовать?


Ответы (1 шт):

Автор решения: Zhihar

в лоб:

const int pin = 54654346;
const std::string text = std::to_string(pin);
const std::string part = text.substr(0, 4);
const int value = std::stoi(part);

или на с:

const int pin = 54654346;
char text[32];
_itoa_s(pin, text, 32, 10);
text[4] = 0;
const int value = atoi(text);

не в лоб, но почти в лоб:

const int pin = 54654346;
int number = pin;

int value = 0;

while (number != 0) {
    const int digit = number % 10;
    number /= 10;

    value = value * 10 + digit;
}

value = value % 10000;

int new_value = 0;

while (value != 0) {
    const int digit = value % 10;
    value /= 10;

    new_value = new_value * 10 + digit;
}

почти в лоб, но чуть хитрее

int variants[10];
int index = 0;

const int pin = 54654346;
int number = pin;

while (number != 0) {
    variants[index++] = number;
    number /= 10;
}

const int value = variants[(index - 4 > 0) ? (index - 4) : 0];

вариант через голую математику (правда для положительных чисел, для отрицательных надо abs добавить и восстановление знака):

const int pin = 54654346;

int power = log10(pin);

const int value = (pin < 10000) ? pin : (pin / pow(10, power - 3));

еще один вариант через while который не требует дополнительных массивов:

const int pin = 54654346;

int value = pin;

while (abs(value) > 10000) value /= 10;
→ Ссылка