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

C++ 实现超 1000 位正整数除法与取余:代码示例及注意要点

以下是使用 C++ 解决此问题的示例代码: ```cpp #include <iostream> #include <string> // 将字符串表示的大整数转换为整数数组 void strToIntArray(const std::string& str, int* num) { for (size_t i = 0; i < str.size(); ++i) { num[i] = str[str.size() - 1 - i] - '0'; } } // 模拟大整数除法 void divideLargeNumbers(const std::string& num1Str, const std::string& num2Str) { int num1[1001] = {0}, num2[1001] = {0}; int len1 = num1Str.size(), len2 = num2Str.size(); strToIntArray(num1Str, num1); strToIntArray(num2Str, num2); int quotient[1001] = {0}, remainder[1001] = {0}; int ptr1 = len1 - 1, ptr2 = len2 - 1; // 计算商 while (ptr1 >= 0) { int carry = 0; for (int i = ptr2; i >= 0; --i) { int temp = num1[ptr1 - (ptr2 - i)] * num2[i] + carry; carry = temp / 10; temp %= 10; num1[ptr1 - (ptr2 - i)] = temp; } quotient[ptr1 - len2 + 1] += carry; --ptr1; } // 计算余数 for (int i = 0; i < len2; ++i) { remainder[i] = num1[i]; } // 输出商 bool start = false; for (int i = 1000; i >= 0; --i) { if (quotient[i]!= 0) { start = true; } if (start) { std::cout << quotient[i]; } } std::cout << std::endl; // 输出余数 start = false; for (int i = len2 - 1; i >= 0; --i) { if (remainder[i]!= 0) { start = true; } if (start) { std::cout << remainder[i]; } } std::cout << std::endl; } int main() { std::string num1, num2; std::cin >> num1 >> num2; divideLargeNumbers(num1, num2); return 0; } ``` 额外需要注意的逻辑点: 1. 处理输入字符串的长度和边界情况。 2. 确保除法和取余的计算准确性。 3. 优化代码的时间和空间复杂度。 ######[AI写代码神器 | 695点数解答 | 2025-03-03 20:30:06]

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