Для вашей задачи просто используйте целочисленное деление /
и оператор модуля %
, чтобы получить нужные цифры.В этом случае это будет
int main()
{
int n = 152799920;
int p1 = n / 1000000; // Extract most significant three digits
int p2 = (n % 1000000)/1000; // Extract middle three digits
int p3 = n % 1000; // Extract least significant three digits
printf("%d/%d/%d", p1, p2, p3);
return 0;
}
Но как насчет извлечения любого диапазона цифр? Предположим, что вы проиндексировали свои десятичные цифры.Самая маленькая правая цифра называется цифрой 0, тогда как самая большая (в этом случае) будет 8. Обратите внимание, что индекс цифр соответствует научной нотации base-10, что означает, что цифра 8 относится к 10 ^ 8-значному значению..
Чтобы извлечь диапазон цифр из int от LSD
до MSD
в форме int, решение будет иметь такую форму (обратите внимание, вы должны вручную заменить [MSD]
, [LSD]
ихс цифрами в фактическом коде):
int p = (n % (int) 1E[MSD + 1])/LSD
Если вы хотите извлечь цифры, более значимые, чем заданный LSD
, он уменьшается до int p = n / LSD
.
Следовательно, ваше решениетакже может быть выражено как здесь ниже, используя научную электронную нотацию.Обратите внимание, что вам нужно преобразовать в int
при расчете остатка, так как операторы остатка не работают на double
s.
int main()
{
int n = 152799920;
int p1 = n / 1E6; // Extract digits 6 and higher
int p2 = (n % (int) 1E6)/ 1E3; // Extract 3 to 5
int p3 = (n % (int) 1E3)/ 1E0; // Extract 0 to 2
printf("%d/%d/%d", p1, p2, p3);
return 0;
}
Вы можете напрямую скопировать оба моих ответа, так как все основные методы компилируются.Ваш результат должен быть 152/799/920
, как и ожидалось.