如何在一个变量中存储printf的多个值?

时间:2019-05-11 17:09:13

标签: c

程序必须接受带有偶数位数的整数N作为输入。
程序必须将N中的每两位数字反转,并将修改后的N打印为输出。

边界条件:10 <= N <10 ^ 16
输入格式:第一行包含N。
输出格式:第一行包含修改后的N。

输入/输出示例1:
输入:214587
输出:125478

说明:前两位数字为2和1,它们反转为1和2。后两位数字为4和5,它们反转为5和4。后两位数字是8和7,其反转为7。和8。

示例输入/输出2:
输入:504786
输出:57468

我已经按照以下的逻辑进行了逻辑:通过打印b/10b%10;在while循环内打印值,在这些地方应该反转输出并卡在其中,请在我的逻辑中提供帮助继续进行,谢谢。

scanf("%d",&a);
while(a>0) {
    b=a%100;
    printf("%d%d",b/10,b%10);
    a=a/100;
}

1 个答案:

答案 0 :(得分:0)

正如我在三个注释(123)中指出的那样,我认为您需要使用递归和一些注意事项。以下是有效的代码,以及一个测试工具(大于要测试的代码),证明其有效:

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

static bool reverse_digit_pairs(uint64_t value)
{
    uint64_t b = value % 100;
    uint64_t v = value / 100;

    if ((v > 0 && v < 10) || (v == 0 && b < 10))
        return false;

    int t = b / 10;     // tens
    int u = b % 10;     // units
    bool ok = true;
    if (v >= 10)
        ok = reverse_digit_pairs(v);
    if (ok)
    {
        if (u == 0 && v == 0)
            printf("%d", t);
        else
            printf("%d%d", u, t);
    }
    return ok;
}

static void test_reverse_digit_pairs(uint64_t v)
{
    printf("V: %20" PRIu64 " = ", v);
    if (!reverse_digit_pairs(v))
    {
        fprintf(stderr, "Odd number of digits in %" PRIu64 "\n", v);
        printf("bogus input");
    }
    putchar('\n');
    fflush(0);   // Ensure standard output (and standard error) are flushed.
}

int main(void)
{
    test_reverse_digit_pairs(UINT64_C(214587));             // 125478 per question
    test_reverse_digit_pairs(UINT64_C(504786));             // 57468  per question
    test_reverse_digit_pairs(UINT64_C(5047000086));         // Pairs of zeros
    test_reverse_digit_pairs(UINT64_C(5047900086));         // Pair of zeros
    test_reverse_digit_pairs(UINT64_C(1234567890123456));   // 16 digits
    test_reverse_digit_pairs(UINT64_MAX);                   // 20 digits
    test_reverse_digit_pairs(UINT64_C(123456789012345));    // Odd digits - failure
    test_reverse_digit_pairs(UINT64_C(0));                  // Odd digits - failure
    test_reverse_digit_pairs(UINT64_C(1));                  // Odd digits - failure
    test_reverse_digit_pairs(UINT64_C(9));                  // Odd digits - failure
    test_reverse_digit_pairs(UINT64_C(10));                 // 2 digits
    test_reverse_digit_pairs(UINT64_C(99));                 // 2 digits
    test_reverse_digit_pairs(UINT64_C(100));                // Odd digits - failure
    test_reverse_digit_pairs(UINT64_C(999));                // Odd digits - failure
    test_reverse_digit_pairs(UINT64_C(1000));               // 4 digits
    test_reverse_digit_pairs(UINT64_C(1098));               // 4 digits
    test_reverse_digit_pairs(UINT64_C(1234));               // 4 digits
    return 0;
}

我从中得到的输出是:

V:               214587 = 125478
V:               504786 = 57468
V:           5047000086 = 574000068
V:           5047900086 = 574090068
V:     1234567890123456 = 2143658709214365
V: 18446744073709551615 = 81447644707390556151
Odd number of digits in 123456789012345
V:      123456789012345 = bogus input
Odd number of digits in 0
V:                    0 = bogus input
Odd number of digits in 1
V:                    1 = bogus input
Odd number of digits in 9
V:                    9 = bogus input
V:                   10 = 1
V:                   99 = 99
Odd number of digits in 100
V:                  100 = bogus input
Odd number of digits in 999
V:                  999 = bogus input
V:                 1000 = 100
V:                 1098 = 189
V:                 1234 = 2143

需要1到4位数字的测试用例才能消除一些问题。我对reverse_digit_pairs()中的第一个条件并不完全满意,但是当我进行一些简化时,我没有得到我认为必需的输出。