|
@@ -0,0 +1,79 @@
|
|
|
+#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[] = {
|
|
|
+ " _ | ||_|",
|
|
|
+ " | |",
|
|
|
+ " _ _||_ ",
|
|
|
+ " _ _| _|",
|
|
|
+ " |_| |",
|
|
|
+ " _ |_ _|",
|
|
|
+ " _ |_ |_|",
|
|
|
+ " _ | |",
|
|
|
+ " _ |_||_|",
|
|
|
+ " _ |_| _|"
|
|
|
+ };
|
|
|
+
|
|
|
+ char buffer[128];
|
|
|
+ if(convertNumberToDigits(number, buffer, 128, digits, digitWidth, digitHeight)) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ puts(buffer);
|
|
|
+}
|
|
|
+
|
|
|
+int main() {
|
|
|
+ printSmallDigits(1234567890);
|
|
|
+ printBigDigits(1234567890);
|
|
|
+ return EXIT_SUCCESS;
|
|
|
+}
|