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

时间:2014-11-05 00:36:26

标签: 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*=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;
}

现在,根据我的经验,这应该有效,如果第一个数字是奇数,它确实有效,但如果我想要得到奇数位的数字是偶数,我会遇到问题。例如:

对于3457和3458,我得到了3458357。但是,对于3456和3457,我得到345734.任何想法为什么?

2 个答案:

答案 0 :(得分:0)

由于可能的舍入问题,最好避免浮点运算。尝试这样的事情(可以缩短,但我试图保持原始结构):

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;
}

答案 1 :(得分:0)

#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;
}