通过将数字分成数组然后交换合并数字位数顺序

时间:2019-01-13 11:39:35

标签: c arrays integer

我无法使用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 :(得分:1)

我会采用略有不同的方法:首先将数字分开。然后调用函数以更改数字顺序。

如果您始终获得两位数字,则可以执行以下操作:

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专家,因此请在使用前验证我的代码...

答案 1 :(得分:1)

如果我们看您的示例: 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);
}

答案 2 :(得分:0)

如果您的条件始终成立,则可以保持简单并执行以下操作:

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

答案 3 :(得分:0)

然后,您得到的不是单个数字,而是对等。只需一枪即可获得最后两位数:

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;

应该给您解决方案。不需要数组。