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

C++ 实现:求解两个 1000 位以内正整数的商和余数

以下是一个用 C++ 实现求两个大正整数之商和余数的示例代码: ```cpp #include <iostream> #include <string> // 将字符串表示的大整数转换为整数数组 void stringToIntArray(const std::string& numStr, int numArray[]) { for (size_t i = 0; i < numStr.size(); ++i) { numArray[i] = numStr[numStr.size() - 1 - i] - '0'; } } // 实现大整数除法 void divideLargeNumbers(const std::string& num1Str, const std::string& num2Str) { int num1[1001] = {0}; int num2[1001] = {0}; stringToIntArray(num1Str, num1); stringToIntArray(num2Str, num2); int quotient[1001] = {0}; int remainder[1001] = {0}; int len1 = num1Str.size(); int len2 = num2Str.size(); int borrow = 0; for (int i = len1 - len2; i >= 0; --i) { int temp = 0; while ((temp = (num1[i + len2] * 10 + num1[i + len2 - 1]) / num2[len2 - 1]) >= 0) { --temp; } ++temp; quotient[i] = temp; for (int j = 0; j < len2; ++j) { int sub = num1[i + j] - quotient[i] * num2[j] - borrow; if (sub < 0) { sub += 10; borrow = 1; } else { borrow = 0; } num1[i + j] = sub; } } // 输出商 bool isLeadingZero = true; for (int i = len1 - len2; i >= 0; --i) { if (quotient[i]!= 0) { isLeadingZero = false; } if (!isLeadingZero) { std::cout << quotient[i]; } } std::cout << std::endl; // 输出余数 int start = 0; while (num1[start] == 0 && start < len1 - len2) { ++start; } for (int i = start; i < len1 - len2; ++i) { std::cout << num1[i]; } std::cout << std::endl; } int main() { std::string num1, num2; std::cin >> num1 >> num2; divideLargeNumbers(num1, num2); return 0; } ``` 额外注意逻辑点: 1. 处理输入字符串时要注意边界情况,如空字符串。 2. 大整数除法过程中要正确处理借位和进位。 3. 输出结果时要注意格式,确保清晰可读。 ######[AI写代码神器 | 743点数解答 | 2025-03-01 14:38:28]

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