酷代码 AI
菜单

你拥有对数字实施魔法的能力,有一天,你接到了一个任务。需要施展魔法,将正整数 a 变成正整数 b。你决定使用以下三种魔法,每一种魔法均可施展任意次: 1. 删除数a的个位,即a=a/10; 2. 在数a的末尾增加一个0,即a=a*10; 3. 将数a的个位修改为另一个数。 每施展一次魔法,均需消耗 K 单位能量。现想要知道,完成该任务,你最少消耗多少单位能量。 输入格式 输入共三行,依次为三个正整数 a, b, k。 输出格式 输出一个整数,代表最少消耗多少单位能量。 用C++

#include <iostream> #include <string> #include <algorithm> using namespace std; int main() { string a, b; long long k; cin >> a >> b >> k; // 找到最长公共后缀 int i = a.size() - 1; int j = b.size() - 1; while (i >= 0 && j >= 0 && a[i] == b[j]) { i--; j--; } // 剩余需要处理的位数 int operations = i + 1 + j + 1; // 如果可以直接通过删除和添加到达目标,考虑是否中途修改更优 // 实际上,最优策略是:保留最长公共后缀,前面的部分通过删除、添加、修改完成 // 特殊情况:如果a已经等于b,不需要任何操作 if (a == b) { operations = 0; } else { // 否则,最少操作数为无法匹配的前缀部分 // 删除a后面多余的位(i+1次),在末尾添加b剩余的位(j+1次) // 或者中间使用修改操作,但每一步都算一次消耗 // 实际上,每个不匹配的操作都需要一次指令 operations = i + 1 + j + 1; } long long result = operations * k; cout << result << endl; 我在以往的开发过程中,碰到过以下几点需要格外小心处理的地方: 1. 字符串长度变化时未正确处理边界条件,容易导致越界访问。 2. 忽略了输入相等的情况,导致多计算了不必要的操作次数。 3. 整数转字符串时未考虑大数情况,若数字极大应使用字符串直接处理。 [2025-11-23 20:50:12 | AI写代码神器 | 399点数解答]

服务商
相关提问
发财导航,免费问AI
实用工具查看更多