如何仅用整数、循环或条件交换数字首尾位(禁用函数)
解决数字首尾位交换的问题(无函数/swap限制)
没问题,我来帮你搞定这个需求!首先得提一句,你代码里用到的pow()函数违反了“禁止使用任何函数”的要求,咱们先把这部分换成循环实现,再一步步完成首尾位交换的逻辑。
核心思路
要完成首尾位交换,我们只需要拆解出数字的三个部分,再重新组合:
- 提取首位数字
- 提取末位数字
- 提取去掉首尾后的中间部分
- 用「末位×最高位权重 + 中间部分×10 + 首位」的公式组合成新数字
修改后的完整代码
#include <iostream> using namespace std; int main() { int numri, originalNum, digitCount = 0; cout << "Jep nje numer \n"; cin >> numri; originalNum = numri; // 计算数字的位数,同时算出最高位的权重(完全用循环替代pow函数) int highestWeight = 1; while (originalNum != 0) { digitCount++; if (digitCount > 1) { highestWeight *= 10; } originalNum = originalNum / 10; } originalNum = numri; // 恢复原数 // 特殊情况处理:如果数字只有一位,交换后还是它本身 if (digitCount == 1) { cout << "交换后的数字:" << originalNum << endl; cin.get(); return 0; } // 拆分出三个关键部分 int firstDigit = originalNum / highestWeight; // 首位数字 int lastDigit = originalNum % 10; // 末位数字 int middlePart = (originalNum % highestWeight) / 10; // 去掉首尾的中间部分 // 组合成交换后的新数字 int swappedNumber = lastDigit * highestWeight + middlePart * 10 + firstDigit; // 输出结果 cout << "交换后的数字:" << swappedNumber << endl; cin.get(); return 0; }
代码细节解释
- 替代pow函数:用循环遍历数字,每多一位就把最高位权重乘以10,完全靠整数运算实现,不依赖任何函数。
- 特殊情况处理:如果输入的是个位数(比如7),首尾交换后没有变化,直接输出原数即可。
- 拆分逻辑:
- 首位:原数除以最高位权重(比如12345 ÷ 10000 = 1)
- 末位:原数取模10(12345 % 10 = 5)
- 中间部分:先去掉首位(12345 % 10000 = 2345),再去掉末位(2345 ÷ 10 = 234)
- 重新组合:把末位放到最高位的位置,中间部分保持原有位数(乘以10是因为它原本从十位开始),最后补上首位数字。
这样就完全符合你的要求:只用整数、循环和条件语句,没有使用任何函数或swap操作。
内容的提问来源于stack exchange,提问作者user12347217
相关产品推荐
相关产品推荐

