Поменяйте местами порядковый номер, разделив число на массивы, а затем объедините - PullRequest
0 голосов
/ 13 января 2019

Я не могу разработать программу с языками массивов C.

Консоль получила 4 номера. Я хочу изменить первые цифры и умножить их на другие.

Пример ввода : 1260

Желаемый вывод : измените 12 на 21 и умножьте их на 60 ->, поэтому на выходе будет 1260 (как 21 * 60)

Это мой текущий код:

int main() {
    int number, temp;
    int newnumber[4];
    int n = 3;

    printf("put the number");
    scanf("%d", &number);

    do {
        newnumber[n] = number % 10;
        number = number / 10;
        n--;
    } while (n >= o);

    temp = newnumber[1];
    newnumber[1] = newnumber[2];
    newnumber[2] = temp;
}

знаете, как мне умножить 21 на 60?

Ответы [ 4 ]

0 голосов
/ 14 января 2019

Тогда вы получаете не отдельные цифры, а пары и тому подобное. Просто получите последние две цифры в одном кадре:

int rem = number % 100;  /* last two digits */
number /= 100;
int msd = number % 10;   /* next, third digit */
number /= 10;
int lsd = number % 10;   /* most significant digit */
/* I don't assume you have more digits, because you are doing different
 * operations with them, no pattern up to here, but you should continue
 * your approach here. */
int out = (msd * 10 + lsd) * rem;

должно дать вам решение. Массивы не нужны.

0 голосов
/ 13 января 2019

Если ваши условия всегда соблюдены, вы можете сделать это просто и сделать что-то вроде этого:

int main() {
    int number;
    int newnumber[4];
    int n = 3;

    printf("put the number");
    scanf("%d", &number);

    do {
        newnumber[n] = number % 10;
        number = number / 10;
        n--;
    } while (n >= 0);

    printf("And the result: %d\n", (newnumber[1] * 10 + newnumber[0]) * (newnumber[2] * 10 + newnumber[3]));
}
0 голосов
/ 13 января 2019

Если мы посмотрим на ваш пример: 1260 => заменить 2 на 1 и умножить 21 на 60.

Неправильная перестановка в вашей основной функции, поскольку вы изменили числа в индексах 1 (вторая позиция) и 2 (третья позиция).

Возвращаясь к вашему вопросу, вы можете получить искомый результат, делая то, что вы сделали, чтобы получить единицы, десятки и сотни ...

int main() {
    int number, temp1, temp2;
    int newnumber[4];
    int n = 3;

    printf("put the number");
    scanf("%d", &number);

    do {
        newnumber[n] = number % 10;
        number = number / 10;
        n--;
    } while (n >= 0);

    temp1 = newnumber[0];
    newnumber[0] = newnumber[1];
    newnumber[1] = temp1;

    temp1 = newnumber[0] * 10;
    temp1 += newnumber[1];

    temp2 = newnumber[2] * 10;
    temp2 += newnumber[3];

    printf("%d", temp1 * temp2);
}
0 голосов
/ 13 января 2019

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

Если вы всегда получаете цифры с 2 цифрами, вы можете сделать это:

int first  = number / 100;
int second = number % 100;

И функция для замены цифры:

function swapDigits(int num) {
    int ans = 0;
    while (num > 0) {
        ans = ans * 10 + num % 10;
        num /= 10; 
    }
    return ans;
}

Теперь просто наберите second * swapDigits(first), чтобы получить результат.

Я не c эксперт, поэтому проверьте мой код перед использованием ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...