我正在尝试编写一个函数,将一个数字的奇数加到第二个数字的末尾,而不使用数组。这是我到目前为止所做的:
#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.任何想法为什么?
答案 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;
}