วิธีตรวจสอบว่าตัวเลขทศนิยมหารด้วย 7 ได้ไหม:
ลบตัวเลขสุดท้าย คูณด้วย 2 และลบออกจากสิ่งที่เหลืออยู่ หากผลลัพธ์ถูกหารด้วย 7 ตัวเลขเดิมจะหารด้วย 7
(อธิบายด้วยเช่นที่นี่ )
กฎนี้ดีสำหรับการตรวจสอบหารด้วยตนเอง ตัวอย่างเช่น:
2016 หารด้วย 7 หรือไม่
ลบ
6*2
ออกจาก 201; เราได้ 189. นี่หารด้วย 7 ได้ไหม? เพื่อตรวจสอบลองใช้กฎอีกครั้งลบ
9*2
ออกจาก 18; เราได้ 0 ดังนั้น 2559 หารด้วย 7 ได้
ในการท้าทายนี้คุณควรใช้กฎนี้จนกว่าสถานะการหารจะชัดเจนซึ่งก็คือจำนวนไม่เกิน 70 (อย่างไรก็ตามดูรายละเอียดด้านล่าง) ทำให้ฟังก์ชั่นหรือโปรแกรมเต็มรูปแบบ
อินพุต : จำนวนเต็มบวก รหัสของคุณควรรองรับอินพุตสูงสุด 32767 (สนับสนุนจำนวนเต็มความแม่นยำโดยพลการเป็นโบนัสดูด้านล่าง)
เอาท์พุท : จำนวนเต็ม (อาจเป็นลบ) ไม่เกิน 70 นั่นเป็นผลมาจากการใช้การหารหารด้วย 7 กฎศูนย์หรือมากกว่าครั้ง
กรณีทดสอบ:
Input Output Alternative output
1 1
10 10 1
100 10 1
13 13 -5
42 42 0
2016 0
9 9
99 -9
9999 -3
12345 3
32767 28 -14
---------- Values below are only relevant for the bonus
700168844221 70 7
36893488147419103232 32 -1
231584178474632390847141970017375815706539969331281128078915168015826259279872 8
เมื่อมีการระบุเอาต์พุตที่เป็นไปได้สองรายการผลลัพธ์จะถูกต้อง: รายการที่สองสอดคล้องกับการใช้กฎอีกครั้ง ห้ามมิให้ใช้กฎนี้กับตัวเลขหลักเดียว: หากคุณลบตัวเลขจะไม่มีสิ่งใดเหลืออยู่ (ไม่ใช่ 0)
โบนัส : หากอัลกอริทึมของคุณ
- รองรับจำนวนเต็มความแม่นยำโดยพลการ
- ดำเนินการผ่านหนึ่งเดียวเท่านั้นในการป้อนข้อมูล
- มีความซับซ้อนของพื้นที่
o(n)
(เช่นน้อยกว่าO(n)
) และ - มีความซับซ้อนเวลา
O(n)
,
โดยที่n
เป็นจำนวนทศนิยม:
ลบ 50% จากจำนวนไบต์ของรหัสของคุณ
โบนัสจริง :
นอกจากนี้หากอัลกอริทึมของคุณอ่านอินพุตในทิศทางปกติเริ่มต้นจากตัวเลขที่สำคัญที่สุดลบ 50% อีกครั้ง - คะแนนของคุณคือ 25% ของจำนวนไบต์ของคุณ (ดูเหมือนเป็นไปได้ แต่ฉันไม่แน่ใจอย่างแน่นอน)
1000000000000000000001
นั้น
long long
อื่นหรือเทียบเท่า