Программе необходимо отобразить переменную с большей первой цифрой

#c

#c

Вопрос:

Программе необходимо показать число с большей первой цифрой, которое работает, только если числа цифр одинаковы для обеих переменных. Попробуйте с этими числами 4506 29985, он должен показать 4506, но программа показывает 29985, программа была написана на языке C.

 #include <stdlib.h>
#include <stdio.h>

int disassembly1 (int a) 
{
    while (a>=10) 
    {
        a /= 10;
    }

    return a;
}

int disassembly2 (int b) 
{
    while (b>=10) 
    {
        b /= 10;
    }

    return b;
}

int main ()
{
    int A1, B1, a, b;

    printf("Int 2 numbers:n");
    scanf_s("%d %d", amp;A1, amp;B1);

    a = A1;
    b = B1;

    disassembly1(A1);
    disassembly2(B1);

    if (a > b || ((a == b) amp;amp; (A1 > B1)))
        printf("%dn", A1);
    else
        printf("%dn", B1);

    system("pause");
}

 

Комментарии:

1. Почему вы написали одну и ту же функцию дважды?

2. disassembly Функции возвращают что-то. Возможно, вы хотите что-то с этим сделать?

3. Вам нужно отладить свой код.

Ответ №1:

Прежде всего, disassembly1 и disassembly2 являются одной и той же функцией и не должны записываться дважды.

Во-вторых, и это более важно, функция disassembly возвращает первую цифру, но вам нужно сохранить ее в переменной.

Рабочий код (с несколькими изменениями):

 #include <stdlib.h>
#include <stdio.h>
int disassembly(int a) 
{
    while (a>=10) 
    {
        a /= 10;
    }
    return a;
}
int main()
{
    int a, b, a_digit, b_digit;
    printf("Int 2 numbers:n");
    scanf_s("%d %d", amp;a, amp;b);
    a_digit = disassembly(a);
    b_digit = disassembly(b);
    if (a_digit > b_digit || ((a_digit == b_digit) amp;amp; (a > b)))
        printf("%dn", a);
    else
        printf("%dn", b);
    system("pause");
    return 0;
}
 

Кроме того, имя disassembly не соответствует значению функции. Я бы предложил изменить ее на что-то вроде get_first_digit .

Ответ №2:

Ваш код не считывает значения, возвращаемые функциями, оставляя переменные a и b неизменными.

Изменить:

 disassembly1(A1);
disassembly2(B1);
 

Для:

 a = disassembly1(A1);
b = disassembly2(B1);
 

Другие предложения:

определите и используйте один экземпляр функции: int disassembly(int x); и вызовите его дважды.

 a = disassembly(A1);
b = disassembly(B1);
 

Ответ №3:

Вот гораздо более простая версия (это matlab / octave, но ее можно легко перенести на c)

 a = 4506;
b = 29985;
isAbigger = floor(a/10^(floor(log10(a)))) > floor(b/10^(floor(log10(b))));