酷代码 AI
菜单
服务商
DeepSeek字节豆包讯飞星火
更多选项

C++ 破解 1 到 1e18 范围内 n 阶乘最右边非 0 数字计算难题!

以下是使用 C++ 解决此问题的代码: ```cpp #include <iostream> int getLastNonZeroDigitOfFactorial(long long n) { int digit = 1; int twoCount = 0; int fiveCount = 0; for (long long i = 2; i <= n; ++i) { long long num = i; while (num % 2 == 0) { num /= 2; twoCount++; } while (num % 5 == 0) { num /= 5; fiveCount++; } digit = (digit * num) % 10; } // 消除 2 和 5 造成的影响 while (twoCount > fiveCount) { digit = (digit * 2) % 10; twoCount--; } while (fiveCount > twoCount) { digit = (digit * 5) % 10; fiveCount--; } return digit; } int main() { long long n; std::cout << "请输入 n: "; std::cin >> n; int result = getLastNonZeroDigitOfFactorial(n); std::cout << "n 的阶乘最右边的非 0 数字是: " << result << std::endl; return 0; } ``` 注意点: 1. 处理大整数时要注意数据类型的选择,避免溢出。 2. 对于循环的边界条件要仔细检查。 3. 代码中的逻辑处理需要考虑各种边界情况。 ######[AI写代码神器 | 386点数解答 | 2025-02-13 10:43:54]

相关提问
本站限时免费提问中
实用工具查看更多
Linux在线手册 [开发类]
Jquery在线手册 [开发类]
今日油价 [生活类]
图片互转base64 [开发类]
时间转换器 [开发类]