Как представить одно десятичное число, разделенное C - PullRequest
0 голосов
/ 16 мая 2018

Я хочу разделить 152799920 в десятичных числах на 152/799/920 выражения и сохранить их отдельно в p1, p2 и p3 соответственно.Другими словами, когда я вывожу значения для p1, p2 и p3 позже, p1 = 152, p2 = 799 и p3 = 920 будут результатом.

Как мнереализовать вышеуказанный метод в коде C?

Ответы [ 2 ]

0 голосов
/ 16 мая 2018

Вам нужны числа в виде чисел или в виде строк?

Если строки, используйте snprintf, чтобы получить цифры, а затем используйте strncpy, чтобы скопировать серии 3.

Если числа, используйте деление модуля, чтобы получить остаток после деления на 1000, затем сдвиньте число, используя целочисленное деление на 1000, и повторите 3 раза.

0 голосов

Для вашей задачи просто используйте целочисленное деление / и оператор модуля %, чтобы получить нужные цифры.В этом случае это будет

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, как и ожидалось.

...