โจทย์นี้มีคนถามมาว่าคิดยังไง
อย่างให้ตัวเลขใดๆมาตัวนึง ยกตัวอย่างเช่น 7465432
ถ้าเราอยากรู้ว่าเลขที่ "หลักหมื่น" มีค่าเท่าไร คำตอบที่ได้คือ 65432
โดยจะตัด 7400000 ทิ้งไปเลย
ตอนแรกผมคิดว่ามันควรจะได้คำตอบง่ายๆในการคำนวณครั้งเดียว
คิดไปคิดมา คิดไม่ออก เลยคิดออกมาได้ประมาณนี้
[Spoil] คลิกเพื่อดูข้อความที่ซ่อนไว้
อธิบายเป็นตัวหนังสือ คือ หา log ของโจทย์ก่อนแล้วเอามาคูณด้วยเลขตัวหน้าสุด
อย่าง 7465432 จะได้ 7000000
เอา 7465432 - 7000000 = 465432
แล้วเอาคำตอบนี้ไปทำซ้ำเรื่อยๆ จนกว่าหา log มาแล้วได้หลักหมื่นถึงหยุด
อันนี้ code โปรแกรม
public static int ExtractNumber(int number, int position)
{
double exponent = (int)Math.Floor(Math.Log10(number));
if (exponent > position - 1)
{
double currentPosition = Math.Pow(10, exponent);
double numberAtPosition = Math.Floor(number / currentPosition) * currentPosition;
return ExtractNumber((int)(number - numberAtPosition), position);
}
else
{
return number;
}
}
คำถามคือ โจทย์นี้สามารถคิดด้วยวิธีที่ง่ายกว่านี้ หรือเรียกว่าโช๊ะเดียวได้คำตอบเลยรึเปล่าครับ
ตอนแรกคิดถึงเรื่อง bitwise operation ก่อนเลย
สามารถคิดด้วยวิธีที่ง่ายกว่านี้ได้รึเปล่าครับ
อย่างให้ตัวเลขใดๆมาตัวนึง ยกตัวอย่างเช่น 7465432
ถ้าเราอยากรู้ว่าเลขที่ "หลักหมื่น" มีค่าเท่าไร คำตอบที่ได้คือ 65432
โดยจะตัด 7400000 ทิ้งไปเลย
ตอนแรกผมคิดว่ามันควรจะได้คำตอบง่ายๆในการคำนวณครั้งเดียว
คิดไปคิดมา คิดไม่ออก เลยคิดออกมาได้ประมาณนี้
[Spoil] คลิกเพื่อดูข้อความที่ซ่อนไว้
คำถามคือ โจทย์นี้สามารถคิดด้วยวิธีที่ง่ายกว่านี้ หรือเรียกว่าโช๊ะเดียวได้คำตอบเลยรึเปล่าครับ
ตอนแรกคิดถึงเรื่อง bitwise operation ก่อนเลย