C#, добавление лидирующих нолей к строковому представлению числа.

Преамбула

Задача опять же учебная, но может пригодиться и в реальной программе. Итак, нам даны числа, скажем, от 1 до 1000, необходимо вывести их на экран или в файл последовательно, добавив лидирующие ноли, исходя из максимального числа. Если максимум 1000, то числа должны быть выведены так:
0001
0002
0003
...
0100
0101
0102
...
1000

Если максимум 100, то:

001
002
...
099
100

Решение

Нам понадобится максимальное число, в тестовом примере мы его жестко зададим:

int maxnumber = 1998;

Далее, понадобится получить количество цифр числа. Это мы уже делали, причем разными способами (копия), выбираем подходящий.

Создаем отдельный класс (в примере AddLZ) и добавляем туда функцию:

public static int CountDigitsRec(int n)
{
    n = (int)Math.Abs(n);
    if (n <= 9)
    {
        return 1;
    }
    else
    {
        return CountDigitsRec(n / 10) + 1;
    }
}

В основной программе получаем количество цифр числа:

int maxdigits = AddLZ.CountDigitsRec(maxnumber);

Далее в цикле перебираем все числа, и скармливаем их функции, которая будет добавлять лидирующие ноли (AddLZ.AddLeaderZeroString(maxdigits, i));

for (int i = 0; i <= maxnumber ; i++)
{
    string Result = AddLZ.AddLeaderZeroString(maxdigits, i);
    //...
}

На вход функции подается два параметра — максимальное количество цифр и текущее число.

Внутри функции

Получаем строковое представление текущего числа:

string scurnum = ((int)Math.Abs(curnum)).ToString();

Получаем длину строки из лидирующих нолей, которая должна быть равна количеству цифр максимального числа, минус длина (количество цифр) текущего числа. Оно получено выше.

int LenLZ = maxnum - scurnum.Length;

Далее, надо сформировать строку нужной длины из одного символа ('0') (копия):

StringBuilder sb = new StringBuilder(maxnum);
for (int i = 0; i < LenLZ; i++)
{
    sb.Append('0');
}

Далее добавляем строковое представление текущего числа:

sb.Append(scurnum);

И возвращаем значение:

return sb.ToString();

Функция целиком

public static string AddLeaderZeroString(int maxnum, int curnum)
{
    string scurnum = ((int)Math.Abs(curnum)).ToString();
    int LenLZ = maxnum - scurnum.Length;

    StringBuilder sb = new StringBuilder(maxnum);
    for (int i = 0; i < LenLZ; i++)
    {
        sb.Append('0');
    }
    sb.Append(scurnum);

    return sb.ToString();
}

Исходники

Тестовый пример на GitHub
Класс AddLZ

3 Responses to C#, добавление лидирующих нолей к строковому представлению числа.

  1. Pingback: C#, добавление лидирующих нолей к строковому представлению числа, более оптимальный способ. | Персональный блог Толика Панкова

Добавить комментарий

Ваш адрес email не будет опубликован.