{"title":"C++题解\n3419:【例72.4】乘法运算","description":"本题解详细讲解了C++实现乘法竖式输出的算法思路和代码实现。示例代码清晰易懂,并配有详细注释,帮助你理解算法逻辑,轻松掌握代码技巧。","keywords":"C++ 乘法运算, 竖式输出, 算法题解, 代码实现, 乘法竖式, 算法学习, C++编程","content":"\n时间限制: 1000 ms 内存限制: 65536 KB\n提交数: 74 通过数: 23\n【题目描述】\n从键盘读入2\n个1000\n以内的正整数m,n\n(n≤m\n),请你模拟乘法运算并以竖式形式输出。\n\n【输入】\n2个1000\n 以内的正整数m,n\n(n≤m\n) ,两数由一个空格分隔间。\n\n【输出】\n输出两个整数进行乘法运算的竖式。每行数字右侧直接回车,没有空格了;最后一行的积所代表的数字左侧无任何内容。具体格式见下面的样例输出。\n\n【样例输入】\n123 45\n\n【样例输出】\n 123\nx 45\n------\n 615\n 4920\n------\n 5535\n\n【样例输入】\n100 20\n\n【样例输出】\n 100\nx 20\n------\n 2000\n------\n 2000\n\n【样例输入】\n999 999\n\n【样例输出】\n 999\nx 999\n------\n 8991\n 8991\n------\n 998001\n\n【解题思路】\n我们可以从个位开始计算乘法,逐位相乘并将结果累加到对应的位置上。具体步骤如下:\n1. 将两个输入的整数转换为字符串。\n2. 创建一个长度为m+n的数组,用于存储每位乘积的结果。\n3. 从低位开始,依次将m的每一位与n的每一位相乘,结果加到对应位置的数组上。\n4. 对数组进行进位处理,即将大于10的元素向前进位。\n5. 将数组转换为字符串,并输出竖式形式的乘法运算结果。\n\n【代码实现】\ncpp\n#include <iostream>\n#include <string>\nusing namespace std;\n\nstring multiply(string m, string n) {\n int len1 = m.length();\n int len2 = n.length();\n int len = len1 + len2;\n int *result = new int[len](); // 初始化为0\n for (int i = len1 - 1; i >= 0; i--) {\n for (int j = len2 - 1; j >= 0; j--) {\n int mul = (m[i] - '0') * (n[j] - '0');\n int p1 = i + j; // 高位\n int p2 = i + j + 1; // 低位\n int sum = mul + result[p2];\n result[p1] += sum / 10;\n result[p2] = sum % 10;\n }\n }\n string res = "";\n int i = 0;\n while (i < len && result[i] == 0) {\n i++;\n }\n for (; i < len; i++) {\n res += to_string(result[i]);\n }\n delete[] result;\n return res;\n}\n\nint main() {\n string m, n;\n cin >> m >> n;\n string res = multiply(m, n);\n int len1 = m.length();\n int len2 = n.length();\n int len = res.length();\n int maxLen = max(len1, len2) + 2;\n for (int i = 0; i < maxLen - len1; i++) {\n cout << " ";\n }\n cout << m << endl;\n cout << "x";\n for (int i = 0; i < maxLen - len2 - 1; i++) {\n cout << " ";\n }\n cout << n << endl;\n for (int i = 0; i < maxLen; i++) {\n cout << "-";\n }\n cout << endl;\n for (int i = 0; i < len; i++) {\n for (int j = 0; j < maxLen - len - i; j++) {\n cout << " ";\n }\n cout << res[i] << endl;\n }\n return 0;\n}\n\n【代码说明】\n1. multiply函数用于进行乘法运算,返回乘积的字符串表示。\n2. 在主函数中,首先读入两个整数m和n。\n3. 调用multiply函数进行乘法运算,得到乘积的字符串表示。\n4. 根据输入的整数长度和乘积的长度,确定输出的竖式的宽度,并按照格式输出乘法运算的竖式。"}

C++ 乘法竖式输出 - 算法题解

原文地址: https://www.cveoy.top/t/topic/qaFx 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录