Задача опять же учебная, но может пригодиться и в реальной программе. Итак, нам даны числа, скажем, от 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(); }
Pingback: C#, добавление лидирующих нолей к строковому представлению числа, более оптимальный способ. | Персональный блог Толика Панкова