Можете ли вы определить минимальное и максимальное количество цифр для печати из цифры в C? - PullRequest
0 голосов
/ 05 ноября 2018

Например, я хочу напечатать максимум 8 цифр (нули обрезаются) и минимум 3 цифры (если оно меньше, оно будет дополнено нулями). Вот так:

int x = 3;
printf("%max/min d", x)

будет печатать

003

int x = 1674;
printf("%max/min d", x)

напечатает

1674

и

int x = 840683028573;
printf("%max/min d", x)

напечатает

83028573

Можно ли это сделать?

Ответы [ 2 ]

0 голосов
/ 05 ноября 2018

Вы можете написать простую функцию для достижения этой цели:
- Используйте ceil и log для вычисления количества цифр в номере
- Используйте long long int для сохранения значения и выполнения арифметики для получения правильных результатов
- Используйте правильный спецификатор преобразования %lld, чтобы напечатать значение

#include <stdio.h>
#include <math.h>

#define min_length  3
#define max_length  8

void PrintDigits(long long int x)
{
    int noOfDigits = ceil(log10(x));
    if(noOfDigits < min_length)
        printf("%03lld\n", x % 1000000);
    else if (noOfDigits > max_length)
        printf("%lld\n", x % 100000000);

}

int main()
{

   long long int x = 3;
   PrintDigits(x);
   x = 840683028573;
   PrintDigits(x);  

   return 0;
}

Выход:

003
83028573
0 голосов
/ 05 ноября 2018

Вы можете сделать что-то вроде этого:

printf("%03d", x % 100000000);

%03d указывает printf заполнять нулями слева до тех пор, пока длина вывода не станет минимум 3 символа.

Другая часть довольно проста, вы хотите максимум 8 справа? Просто посмотрите на остаток.

Если ваш ввод не помещается в целое число, просто замените int на long long, а затем замените %03d на %03lld, поскольку lld является спецификатором для long long int (или просто ld для long int).

Все это предполагает, что ваши значения всегда строго положительны (в этом случае вы также можете использовать переменные unsigned, где спецификатор d заменяется на u). Если ваши значения подписаны, и вы хотите, чтобы конечный результат был длиной 8 символов (без минуса), вы можете просто применить условный оператор:

printf("%03d", (x < 0 ? x % 10000000 : x % 100000000));
...