gpt4 book ai didi

c - 如何将 printf 的多个值存储在变量中?

转载 作者:行者123 更新时间:2023-11-30 19:27:06 26 4
gpt4 key购买 nike

程序必须接受偶数位数的整数 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%1​​0; 继续在 while 循环内打印值的逻辑,其中输出应该相反,我是陷入其中,请帮助我的逻辑如何进一步进行,谢谢。

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

最佳答案

正如我在三个评论( 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() 中的第一个条件并不完全满意,但当我尝试一些简化时,我没有得到我认为需要的输出。

关于c - 如何将 printf 的多个值存储在变量中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56092561/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com