如何交换十进制数字中的偶数和奇数?

时间:2013-12-15 09:57:20

标签: c

例如: 1:123456应转换为214365 2:12345应转换为103254

2 个答案:

答案 0 :(得分:1)

int32_t conv(int32_t n){
    char buff[16], *p = &buff[1];
    int i, v = n < 0 ? -n : n;

    sprintf(p, "%010d", v);
    for(i=0;i<5;++i,++p){
        char c;
        c = *p;
        *p = p[1];
        *(++p) = c;
    }
    buff[0] = (n < 0) ? '-' : ' ';
    return atoi(buff);
}

size_t conv(size_t n){
    size_t q, r, wk, mul=1, ret = 0;
    for(;n;n/=100, mul*=100){
        wk = n % 100;
        r = wk % 10;
        q = wk / 10;
        ret += (r * 10 + q)*mul;
    }
    return ret;
}

答案 1 :(得分:0)

首先澄清一下:字符串中整数与该整数的十进制表示之间存在差异。你想要第二个。

正如H2CO3所指出的那样,你可以使用模数自行完成:将你的数字分解为十进制数,然后进行交换,然后重新计算数字(仅限mul / add)。

这是另一种方式:

  • 使用malloc和sprintf从整数创建一个字符串。

  • 循环播放字符串并进行字符交换

  • 打印该字符串,或者如果要将其转换回带有atoi的整数