12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- typedef unsigned int uint;
- typedef char* string;
- uint getNumberOfDigits(uint number) {
- uint counter = 1;
- while(number >= 10) {
- number /= 10;
- counter++;
- }
- return counter;
- }
- int convertNumberToDigits(uint number, char* buffer, uint bufferLength, const string* digits, uint dWidth, uint dHeight) {
- uint digitAmount = getNumberOfDigits(number);
- uint lineLength = digitAmount * dWidth + 1;
- uint length = lineLength * dHeight;
- if(length >= bufferLength) {
- return 1;
- }
- for(uint i = 0; i < digitAmount; i++) {
- uint digit = number % 10;
- uint offset = (digitAmount - 1 - i) * dWidth;
- for(uint line = 0; line < dHeight; line++) {
- memcpy(buffer + offset + lineLength * line, digits[digit] + dWidth * line, dWidth);
- }
- number /= 10;
- }
- for(uint line = 1; line < dHeight; line++) {
- buffer[lineLength * line - 1] = '\n';
- }
- buffer[length - 1] = '\0';
- return 0;
- }
- int convertNumber(uint number, char* buffer, uint bufferLength) {
- const string digits[] = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9"};
- return convertNumberToDigits(number, buffer, bufferLength, digits, 1, 1);
- }
- void printSmallDigits(uint number) {
- char buffer[128];
- if(convertNumber(number, buffer, 128)) {
- return;
- }
- puts(buffer);
- }
- void printBigDigits(uint number) {
- const uint digitWidth = 3;
- const uint digitHeight = 3;
- const string digits[] = {
- " _ | ||_|", // 0
- " | |", // 1
- " _ _||_ ", // 2
- " _ _| _|", // 3
- " |_| |", // 4
- " _ |_ _|", // 5
- " _ |_ |_|", // 6
- " _ | |", // 7
- " _ |_||_|", // 8
- " _ |_| _|" // 9
- };
- char buffer[128];
- if(convertNumberToDigits(number, buffer, 128, digits, digitWidth, digitHeight)) {
- return;
- }
- puts(buffer);
- }
- int main() {
- printSmallDigits(1234567890);
- printBigDigits(1234567890);
- return EXIT_SUCCESS;
- }
|