C-将一个数字的奇数添加到另一个数字的末尾

C-将一个数字的奇数添加到另一个数字的末尾,c,numbers,C,Numbers,我正在尝试编写一个函数,将一个数字的奇数添加到第二个数字的末尾,而不使用数组。以下是我目前掌握的情况: #include <stdio.h> #include <math.h> int NumberAdd (int n, int m) { int power=1,x=0,counter=0,newnumber; while(n!=0) { if(n%2!=0) { x=x+(n%10)*power; power*=1

我正在尝试编写一个函数,将一个数字的奇数添加到第二个数字的末尾,而不使用数组。以下是我目前掌握的情况:

#include <stdio.h>
#include <math.h>
int NumberAdd (int n, int m)
{
int power=1,x=0,counter=0,newnumber;
while(n!=0)
    {
    if(n%2!=0)
    {
        x=x+(n%10)*power;
        power*=10;
        counter++;
    }
    n=n/10;
    }

        newnumber=m*pow(10,counter)+x;
        return newnumber;

        }
int main ()
{
int m,n;
scanf("%d %d", &n, &m);

printf("%d\n", NumberAdd(n,m));

return 0;
}
#包括
#包括
整数d(整数n,整数m)
{
整数幂=1,x=0,计数器=0,新数;
而(n!=0)
{
如果(n%2!=0)
{
x=x+(n%10)*功率;
功率*=10;
计数器++;
}
n=n/10;
}
newnumber=m*pow(10,计数器)+x;
返回newnumber;
}
int main()
{
int m,n;
scanf(“%d%d”,&n,&m);
printf(“%d\n”,编号d(n,m));
返回0;
}
根据我的经验,这应该行得通,如果第一个数字是奇数,它确实行得通,但是如果我试图从中得到奇数的数字是偶数,我就会遇到问题。例如:


对于3457和3458,我得到的结果是3458357。但是,对于3456和3457,我得到了345734。知道为什么吗?

由于可能存在舍入问题,最好避免使用浮点运算。尝试类似的方法(可以缩短,但我尝试保持原始结构):


@AndrejNaumovski对代码进行了一点更新。您只需使用已经计算的
power
,而不用调用
pow()
int NumberAdd(int n, int m)
{
    int power = 1, x = 0, newnumber;
    while (n != 0)
    {
        if (n % 2 != 0)
        {
            x = x + (n % 10)*power;
            power *= 10;
        }
        n = n / 10;
    }

    newnumber = m * power + x;
    return newnumber;
}
#define MAXNUM 1000000000

int NumberAdd (int n, int m)
{
    int quotient, divisor = MAXNUM;
    do {
        quotient = n / divisor;
        if (quotient & 1)
            m = m * 10 + quotient;
        n = n - quotient * divisor;
        divisor /= 10;
    }
    while (divisor);
    return m;
}