gpt4 book ai didi

c++ - 反转整数的一部分(一半)的函数

转载 作者:行者123 更新时间:2023-11-30 20:57:25 38 4
gpt4 key购买 nike

我想编写一个函数来反转数字的两个部分之一:

输入是:num = 1234567; part = 2输出是:1234765

所以这里的 part 只能是 1 或 2

现在我知道如何获得第 1 部分

int firstPartOfInt(int num) {
int ret = num;
digits = 1, halfDig = 10;
while (num > 9) {
ret = ret / 10;
digits++;
}
halfDigits = digits / 2;
for (int i = 1; i < halfDigits; i++) {
halfDigits *= 10;
}
ret = num;
while (num > halfDigits) {
ret = ret / 10;
}
return ret;
}

但我不知道如何获取第 2 部分并反转数字。如果您在此处发布代码,请不要使用 vector<> 和其他与 C 不兼容的 C++ 功能

最佳答案

一种方法是计算出数字的总位数,然后按照一定的顺序从原数字中提取数字,计算出一个新的数字,复杂度O(number-of-digits):

#include <stdio.h>
#include <stdlib.h>

unsigned reverse_decimal_half(unsigned n, unsigned half) {
unsigned char digits[sizeof(n) * 3];
unsigned digits10 = 0;
do digits[digits10++] = n % 10;
while(n /= 10);
unsigned result = 0;
switch(half) {
case 1:
for(unsigned digit = digits10 / 2; digit < digits10; ++digit)
result = result * 10 + digits[digit];
for(unsigned digit = digits10 / 2; digit--;)
result = result * 10 + digits[digit];
break;
case 2:
for(unsigned digit = digits10; digit-- > digits10 / 2;)
result = result * 10 + digits[digit];
for(unsigned digit = 0; digit < digits10 / 2; ++digit)
result = result * 10 + digits[digit];
break;
default:
abort();
}
return result;
}

int main() {
printf("%u %u %u\n", 0, 1, reverse_decimal_half(0, 1));
printf("%u %u %u\n", 12345678, 1, reverse_decimal_half(12345678, 1));
printf("%u %u %u\n", 12345678, 2, reverse_decimal_half(12345678, 2));
printf("%u %u %u\n", 123456789, 1, reverse_decimal_half(123456789, 1));
printf("%u %u %u\n", 123456789, 2, reverse_decimal_half(123456789, 2));
}

输出:

0 1 0
12345678 1 43215678
12345678 2 12348765
123456789 1 543216789
123456789 2 123459876

关于c++ - 反转整数的一部分(一半)的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60026279/

38 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com