{"ScriptPreparationCode":"/*your preparation JavaScript code goes here\r\nTo execute async code during the script preparation, wrap it as function globalMeasureThatScriptPrepareFunction, example:*/\r\nasync function globalMeasureThatScriptPrepareFunction() {\r\n // This function is optional, feel free to remove it.\r\n // await someThing();\r\n}","TestCases":[{"Name":"bigint","Code":"/*When writing async/deferred tests, use \u0060deferred.resolve()\u0060 to mark test as done*/\r\nfunction numberToBigInt(num) {\r\n const str = num.toString();\r\n const decimalIndex = str.indexOf(\u0027.\u0027);\r\n const scale = decimalIndex === -1 ? 0 : str.length - decimalIndex - 1;\r\n \r\n const factor = Math.pow(10, scale);\r\n const scaledValue = Math.round(Math.abs(num) * factor);\r\n \r\n return {\r\n value: BigInt(scaledValue),\r\n exp: -scale\r\n };\r\n}\r\nnumberToBigInt(1230.1234);","IsDeferred":false},{"Name":"parts","Code":"function numberToBigInt(num) {\r\n let intPart = Math.trunc(num);\r\n let fracPart = Math.abs(num - intPart);\r\n \r\n let scale = 0;\r\n while (fracPart !== 0 \u0026\u0026 scale \u003C 20) {\r\n fracPart *= 10;\r\n intPart = intPart * 10 \u002B Math.trunc(fracPart);\r\n fracPart = fracPart - Math.trunc(fracPart);\r\n scale\u002B\u002B;\r\n }\r\n \r\n return {\r\n value: BigInt(Math.round(intPart)),\r\n exp: -scale\r\n };\r\n}\r\nnumberToBigInt(1230.1234);","IsDeferred":false},{"Name":"double","Code":"function numberToBigInt(num) {\r\n const buffer = new ArrayBuffer(8);\r\n const view = new DataView(buffer);\r\n view.setFloat64(0, num);\r\n \r\n const sign = view.getUint8(0) \u003E\u003E 7;\r\n const exponent = ((view.getUint8(0) \u0026 0x7F) \u003C\u003C 4) | (view.getUint8(1) \u003E\u003E 4);\r\n const mantissa = BigInt(view.getUint32(4)) | \r\n (BigInt(view.getUint16(2) \u0026 0x0FFF) \u003C\u003C 32n);\r\n \r\n const bias = 1023;\r\n const scale = exponent - bias - 52;\r\n const value = mantissa | (1n \u003C\u003C 52n);\r\n \r\n return {\r\n value: sign ? -value : value,\r\n exp: scale\r\n };\r\n}\r\nnumberToBigInt(1230.1234);","IsDeferred":false},{"Name":"\u041F\u0440\u044F\u043C\u043E\u0435 \u043C\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u0435 \u0441 \u0444\u0438\u043A\u0441\u0438\u0440\u043E\u0432\u0430\u043D\u043D\u043E\u0439 \u0442\u043E\u0447\u043D\u043E\u0441\u0442\u044C\u044E:","Code":"function numberToBigInt(num) {\r\n const PRECISION = 15; // \u041C\u0430\u043A\u0441\u0438\u043C\u0430\u043B\u044C\u043D\u0430\u044F \u0442\u043E\u0447\u043D\u043E\u0441\u0442\u044C IEEE 754\r\n const scale = BigInt(10 ** PRECISION);\r\n const scaledValue = BigInt(Math.round(num * Number(scale)));\r\n \r\n // \u041E\u043F\u0442\u0438\u043C\u0438\u0437\u0430\u0446\u0438\u044F: \u0443\u0431\u0438\u0440\u0430\u0435\u043C \u043B\u0438\u0448\u043D\u0438\u0435 \u043D\u0443\u043B\u0438 \u0432 \u043A\u043E\u043D\u0446\u0435\r\n let value = scaledValue;\r\n let exp = -PRECISION;\r\n while (value !== 0n \u0026\u0026 value % 10n === 0n) {\r\n value /= 10n;\r\n exp\u002B\u002B;\r\n }\r\n \r\n return { value, exp };\r\n}\r\nnumberToBigInt(1230.1234);","IsDeferred":false},{"Name":"\u0411\u0438\u0442\u043E\u0432\u044B\u0435 \u043E\u043F\u0435\u0440\u0430\u0446\u0438\u0438 (\u0441\u0430\u043C\u044B\u0439 \u0431\u044B\u0441\u0442\u0440\u044B\u0439 \u0434\u043B\u044F \u0446\u0435\u043B\u044B\u0445 \u0447\u0438\u0441\u0435\u043B \u0441 \u0430\u0432\u0442\u043E\u043C\u0430\u0442\u0438\u0447\u0435\u0441\u043A\u0438\u043C \u043F\u0435\u0440\u0435\u0445\u043E\u0434\u043E\u043C \u043D\u0430 \u043C\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u0435):","Code":"function numberToBigInt(num) {\r\n // \u0411\u044B\u0441\u0442\u0440\u0430\u044F \u043F\u0440\u043E\u0432\u0435\u0440\u043A\u0430 \u043D\u0430 \u0446\u0435\u043B\u043E\u0435 \u0447\u0438\u0441\u043B\u043E \u0447\u0435\u0440\u0435\u0437 \u0431\u0438\u0442\u043E\u0432\u044B\u0435 \u043E\u043F\u0435\u0440\u0430\u0446\u0438\u0438\r\n if ((num | 0) === num) {\r\n return {\r\n value: BigInt(num),\r\n exp: 0\r\n };\r\n }\r\n \r\n // \u0414\u043B\u044F \u0434\u0440\u043E\u0431\u043D\u044B\u0445 - \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0435\u043C \u043C\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u0435\r\n const scale = 1000000n; // 10^6 \u0434\u043B\u044F \u0434\u043E\u0441\u0442\u0430\u0442\u043E\u0447\u043D\u043E\u0439 \u0442\u043E\u0447\u043D\u043E\u0441\u0442\u0438\r\n const scaledValue = BigInt(Math.round(num * 1000000));\r\n \r\n // \u041E\u043F\u0442\u0438\u043C\u0438\u0437\u0430\u0446\u0438\u044F \u0445\u0432\u043E\u0441\u0442\u043E\u0432\u044B\u0445 \u043D\u0443\u043B\u0435\u0439\r\n let value = scaledValue;\r\n let exp = -6;\r\n while (value % 10n === 0n) {\r\n value /= 10n;\r\n exp\u002B\u002B;\r\n }\r\n \r\n return { value, exp };\r\n}\r\nnumberToBigInt(1230.1234);","IsDeferred":false},{"Name":"\u041A\u043E\u043C\u0431\u0438\u043D\u0438\u0440\u043E\u0432\u0430\u043D\u043D\u044B\u0439 \u043F\u043E\u0434\u0445\u043E\u0434 \u0441 \u043A\u044D\u0448\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u0435\u043C \u0441\u0442\u0435\u043F\u0435\u043D\u0435\u0439:","Code":"function numberToBigInt(num) {\r\n // \u041A\u044D\u0448 \u0441\u0442\u0435\u043F\u0435\u043D\u0435\u0439 10 \u0434\u043B\u044F \u043E\u043F\u0442\u0438\u043C\u0438\u0437\u0430\u0446\u0438\u0438\r\n const POWERS = [1, 10, 100, 1000, 10000, 100000, 1000000];\r\n \r\n // \u041E\u043F\u0440\u0435\u0434\u0435\u043B\u044F\u0435\u043C \u043A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E \u0437\u043D\u0430\u043A\u043E\u0432 \u043F\u043E\u0441\u043B\u0435 \u0437\u0430\u043F\u044F\u0442\u043E\u0439\r\n const magnitude = Math.abs(num);\r\n let scale = 0;\r\n \r\n if (magnitude !== Math.floor(magnitude)) {\r\n const fraction = magnitude - Math.floor(magnitude);\r\n scale = Math.min(6, -Math.floor(Math.log10(fraction)));\r\n }\r\n \r\n const scaledValue = Math.round(num * POWERS[scale]);\r\n \r\n return {\r\n value: BigInt(scaledValue),\r\n exp: -scale\r\n };\r\n}\r\nnumberToBigInt(1230.1234);","IsDeferred":false}]}