Как получить первые четыре элемента из переменной целого типа на СИ?
У меня есть переменная типа 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;