Skip to content

Instantly share code, notes, and snippets.

@boki1
Created April 27, 2019 22:02
Show Gist options
  • Save boki1/2f253053f3e4b3be0fe5bcc08514b645 to your computer and use it in GitHub Desktop.
Save boki1/2f253053f3e4b3be0fe5bcc08514b645 to your computer and use it in GitHub Desktop.
From digits to text - School First HW
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int CalculateFullTriplets(int s)
{
int t = 0;
while (s - 3 > 0)
{
s -= 3;
++t;
}
return t + 1;
}
void FillWithTriplets(int small, int big, int* arr, char* inp)
{
int c = 0;
for (int i = big; i - 3 >= 0; i -= 3)
{
char triplet[3];
triplet[0] = inp[i - 3]; triplet[1] = inp[i - 2]; triplet[2] = inp[i - 1];
inp[i - 1] = '\0'; inp[i - 2] = '\0'; inp[i - 3] = '\0';
int n = atoi(triplet);
arr[c] = n;
c++;
}
arr[c] = atoi(inp);
for(int i = 0; i < small / 2; i++)
{
int tmp = arr[i];
arr[i] = arr[small - 1 - i];
arr[small - 1 - i] = tmp;
}
}
void IntToString(int* arr, int size, int t)
{
char* digits[] = { " ", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten", "eleven", "twelve" };
char* teens[] = { "", "", "twen", "thir", "four", "fif", "six", "seven", "eigh", "nine" };
int len = 30;
char* tens[len];
for (int i = 0; i < len; ++i) tens[i] = "";
tens[1] = "ty";
tens[2] = "hundred";
tens[3] = "thousand";
tens[6] = "million";
tens[9] = "billion";
tens[12] = "trillion";
tens[15] = "quadrillion";
tens[18] = "quintillion";
tens[21] = "sextillion";
tens[24] = "septillion";
tens[27] = "octillion";
tens[30] = "nonillion";
char num[3];
int curr;
for (int i = 0; i < t; ++i)
{
curr = 0;
sprintf(num, "%d", arr[i]);
if (arr[i] >= 100) {
printf("%s %s ", digits[num[curr] - '0'], tens[2]);
arr[i] -= 100 * (num[curr] - '0');
size -= 1;
curr++;
}
if (arr[i] >= 20 && arr[i] < 100) {
printf("%sty ", teens[num[curr] - '0']);
arr[i] -= 10 * (num[curr] - '0');
size -= 1;
curr++;
} else if (arr[i] < 20 && arr[i] > 12) {
printf("%steen ", teens[num[curr + 1] - '0']);
arr[i] -= 10 * (num[curr] - '0');
size -= 1;
curr++;
continue;
}
if (arr[i] > 0 && arr[i] < 13) {
printf("%s ", digits[arr[i]]);
size -= ( (arr[i] > 9) ? 2 : 1 );
arr[i] = 0; }
else if (arr[i] == 0) continue;
printf("%s ", tens[size]);
}
printf("\n");
}
void totext(char* input)
{
int size = strlen(input);
int t = CalculateFullTriplets(size);
int arr[t];
FillWithTriplets(t, size, arr, input);
IntToString(arr, size, t);
}
int main(int argc, char* argv[])
{
for (int i = 1; i < argc; ++i)
if (strlen(argv[i]) > 30)
printf("This is waaay to much for me.\n");
else
totext(argv[i]);
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment