ผมทำโจทย์เลขโรมันอยู่
[Spoil] คลิกเพื่อดูข้อความที่ซ่อนไว้ #region math_RomanNumberToArabic
//http://romannumeralsconverter.onlinegratis.tv/th/
//https://stackoverflow.com/questions/7040289/converting-integers-to-roman-numerals
public static readonly Dictionary<char, int> RomanNumberDictionary = new Dictionary<char, int>
{
{ 'I', 1 },
{ 'V', 5 },
{ 'X', 10 },
{ 'L', 50 },
{ 'C', 100 },
{ 'D', 500 },
{ 'M', 1000 },
};
public static readonly Dictionary<int, string> NumberRomanDictionary = new Dictionary<int, string>
{
{ 1000, "M" },
{ 900, "CM" },
{ 500, "D" },
{ 400, "CD" },
{ 100, "C" },
{ 90, "XC" },
{ 50, "L" },
{ 40, "XL" },
{ 10, "X" },
{ 9, "IX" },
{ 5, "V" },
{ 4, "IV" },
{ 1, "I" },
};
public static string ToRomanNumber(this Object number)
{
var roman = new StringBuilder();
int _number = (int)number;
foreach (var item in NumberRomanDictionary)
{
while (_number >= item.Key)
{
roman.Append(item.Value);
_number -= item.Key;
}
}
return roman.ToString();
}
public static int FromRomanNumberToArabic(this string roman)
{
int total = 0;
int current, previous = 0;
char currentRoman, previousRoman = '\0';
for (int i = 0; i < roman.Length; i++)
{
currentRoman = roman;
previous = previousRoman != '\0' ? RomanNumberDictionary[previousRoman] : '\0';
current = RomanNumberDictionary[currentRoman];
if (previous != 0 && current > previous)
{
total = total - (2 * previous) + current;
}
else
{
total += current;
}
previousRoman = currentRoman;
}
return total;
}
#endregion
[Spoil] คลิกเพื่อดูข้อความที่ซ่อนไว้ public static QuestionItem GetProblems01() {
int a = RandomNumber.GenerateRandomNumber(1, 1000000);
string strNum = a.ToRomanNumber();
// สร้างข้อความโจทย์
string questionText = $"แปลงเลขโรมันจาก {a} ให้เป็นเลขอารบิก";
string answer = strNum;
// สร้าง QuestionItem
return new QuestionItem(answer, questionText);
}
แล้ว ค่าที่ออกมามันเป็นแบบนี้
ข้อ: 1
Problem:
แปลงเลขฐาน 2 (1111011) ให้เป็นเลขฐาน 10
ข้อ: 2
Problem:
แปลงเลขอารบิกจาก MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMCCXXII ให้เป็นเลขโรมัน
ข้อ: 3
Problem:
แปลงเลขโรมันจาก 525081 ให้เป็นเลขอารบิก
ข้อ: 4
Problem:
แปลงเลขฐาน 10 (216) ให้เป็นเลขฐาน 16
ข้อ: 5
Problem:
แปลงเลขฐาน 2 (1000100) ให้เป็นเลขฐาน 10
ข้อ: 6
Problem:
แปลงเลขฐาน 16 (27) ให้เป็นเลขฐาน 10
ข้อ: 7
Problem:
แปลงเลขฐาน 10 (182) ให้เป็นเลขฐาน 8
ข้อ: 8
Problem:
แปลงเลขฐาน 10 (153) ให้เป็นเลขฐาน 8
ข้อ: 9
Problem:
แปลงเลขฐาน 16 (F) ให้เป็นเลขฐาน 2
ข้อ: 10
Problem:
แปลงเลขอารบิกจาก MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMDCXXII ให้เป็นเลขโรมัน
ผมเลยไปถาม chatgpt เขาบอกว่า อ้อ โค้ดคุณมันเกิน 3999 ถึงกับอ้าววว เลย ว่า แล้วเมื่อก่อนเขานับเลขเยอะๆ กันยังไง
ลูกก็บ่นไปเห๊อะ พ่อมันยาวไป ทำไม่ได้
https://pantip.com/topic/43761463
ผมเพิ่งรู้ว่าเลขโรมันจำกัดค่าถึงแค่ 3999
[Spoil] คลิกเพื่อดูข้อความที่ซ่อนไว้
[Spoil] คลิกเพื่อดูข้อความที่ซ่อนไว้
แล้ว ค่าที่ออกมามันเป็นแบบนี้
ข้อ: 1
Problem:
แปลงเลขฐาน 2 (1111011) ให้เป็นเลขฐาน 10
ข้อ: 2
Problem:
แปลงเลขอารบิกจาก MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMCCXXII ให้เป็นเลขโรมัน
ข้อ: 3
Problem:
แปลงเลขโรมันจาก 525081 ให้เป็นเลขอารบิก
ข้อ: 4
Problem:
แปลงเลขฐาน 10 (216) ให้เป็นเลขฐาน 16
ข้อ: 5
Problem:
แปลงเลขฐาน 2 (1000100) ให้เป็นเลขฐาน 10
ข้อ: 6
Problem:
แปลงเลขฐาน 16 (27) ให้เป็นเลขฐาน 10
ข้อ: 7
Problem:
แปลงเลขฐาน 10 (182) ให้เป็นเลขฐาน 8
ข้อ: 8
Problem:
แปลงเลขฐาน 10 (153) ให้เป็นเลขฐาน 8
ข้อ: 9
Problem:
แปลงเลขฐาน 16 (F) ให้เป็นเลขฐาน 2
ข้อ: 10
Problem:
แปลงเลขอารบิกจาก MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMDCXXII ให้เป็นเลขโรมัน
ผมเลยไปถาม chatgpt เขาบอกว่า อ้อ โค้ดคุณมันเกิน 3999 ถึงกับอ้าววว เลย ว่า แล้วเมื่อก่อนเขานับเลขเยอะๆ กันยังไง
ลูกก็บ่นไปเห๊อะ พ่อมันยาวไป ทำไม่ได้
https://pantip.com/topic/43761463