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
Это репост с сайта http://tolik-punkoff.com
Оригинал: http://tolik-punkoff.com/2021/01/20/c-do