Skip to content

Instantly share code, notes, and snippets.

@mr5z
Last active August 29, 2023 15:02
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mr5z/746927484e59c42eb2bfd4102be40ac6 to your computer and use it in GitHub Desktop.
Save mr5z/746927484e59c42eb2bfd4102be40ac6 to your computer and use it in GitHub Desktop.
Code is borked
string[] ones = { "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten" };
string[] teens = { "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen" };
string[] tens = { "", "", "twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety" };
string[] suffixes = { "thousand", "million", "billion", "trillion", "quadrillion", "quintillion", "sextillion" };
string NumberToWords(ulong number)
{
if (number >= 1 && number <= 10)
{
return ones[number - 1];
}
else if (number >= 11 && number <= 19)
{
return teens[number - 11];
}
else if (number >= 20 && number <= 99)
{
var remainder = number % 10;
return $"{tens[number / 10]}{(remainder != 0 ? $"-{ones[remainder - 1]}" : "")}";
}
else if (number >= 100 && number <= 999)
{
var quotient = (int)Math.Floor((double)(number / 100));
var remainder = (ulong)Math.Floor((double)(number % 100));
return $"{ones[quotient - 1]} hundred{(remainder != 0 ? $" and {NumberToWords(remainder)}" : "")}";
}
else
{
for (var i = suffixes.Length - 1; i >= 0; i--)
{
var magnitude = (ulong)Math.Pow(10, 3 * i);
if (number >= magnitude)
{
var quotient = (ulong)Math.Floor((double)number / magnitude);
var remainder = number % magnitude;
return $"{NumberToWords(quotient)} {suffixes[i - 1]}{(remainder != 0 ? $" {NumberToWords(remainder)}" : "")}";
}
}
return "zero";
}
}
while (true)
{
Console.Write("< ");
var input = Console.ReadLine();
try
{
var sanitized = input.Replace("_", "");
var words = NumberToWords(ulong.Parse(sanitized));
Console.WriteLine("> " + words);
}
catch (Exception ex)
{
Console.WriteLine(ex);
break;
}
}
@Regenhardt
Copy link

Borked how?

@mr5z
Copy link
Author

mr5z commented Aug 29, 2023

Run it. It's borked.

@Regenhardt
Copy link

Recommend writing unit tests at this point^^
1 is ok
10 is ok
100 is not ok, use this: ones[number / 100 - 1], it lacked the -1 there.
151 is ok
1111 is ok
1125 is ok

@Regenhardt
Copy link

Regenhardt commented Aug 29, 2023

Also I'm not actually building the whole thing i just use a dib file: https://gist.github.com/Regenhardt/9c3ef2974becd12589287c3cccb530ef

@mr5z
Copy link
Author

mr5z commented Aug 29, 2023

I think I've fixed it. Yeah, this requires tests but too lazy to do that rn.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment