Преамбула
Задача опять же учебная, но может пригодиться и в реальной программе. Итак, нам даны числа, скажем, от 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