2014-11-05 14 views
0

Я пытаюсь написать функцию, которая добавляет нечетные цифры одного номера в конец второго номера без использования массивов. Вот то, что я до сих пор:C - Добавить нечетные цифры числа в конец другого номера

#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

Лучше избегать арифметики с плавающей запятой из-за возможных проблем округления. Попробуйте что-то вроде этого (может быть короче, но я пытался сохранить первоначальную структуру):

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

Спасибо большое, теперь работает! –

+0

@AndrejNaumovski Я немного обновил код. Вы можете просто использовать «мощность», которую вы уже рассчитали, вместо вызова 'pow()'. – AlexD

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; 
} 
Смежные вопросы