gpt4 book ai didi

c - 在 C 中如何使用整数中最左边的数字

转载 作者:太空宇宙 更新时间:2023-11-04 02:50:28 25 4
gpt4 key购买 nike

我想知道如何反转我的输出以匹配输入的数字。例如,如果用户输入 543210,我希望输出为:五四三二一零。但是相反,它被颠倒了,我不知道如何扭转它。

I can't use loops or anything else.

代码:

int main(void){
int value;
int digit;

printf("enter:");
scanf("%i", &value);

while(value)
{


digit = value % 10;
value = value / 10;

if(digit != 0)
{

switch(digit)
{
case 0:
printf("zero ");
break;
case 1:
printf("one ");
break;
case 2:
printf("two ");
break;
case 3:
printf("three ");
break;
case 4:
printf("four ");
break;
case 5:
printf("five ");
break;
case 6:
printf("six ");
break;
case 7:
printf("seven ");
break;
case 8:
printf("eight ");
break;

case 9:
printf("nine ");
break;
}
}

}

return 0;

}

例子:如果用户输入 1234
输出将是:四三二一。

我如何将其修改为:一二三四。

最佳答案

既然您已经说过不允许使用循环,那么递归确实是您可能希望使用的东西。我个人不确定不将递归视为循环是否正确,但无论如何。

你在那里使用了一个while,它也是一个循环。如果您允许使用循环,那么您只需在代码中进行以下易于理解的修改,并获得您想要的输出:

    ...
int input; // <-- added this
int value;
int digit;

printf( "enter:" );
scanf( "%i", &input ); // <-- notice the change in variable usage

value = 0;
while ( input ) {
value = 10 * value + input % 10; // adds the last digit of input to value from right
input /= 10;
}

while ( value ) { ... }
...

如果您不允许使用循环,那么您可能需要使用一个特殊的函数,一个为单一情况输出特定值并在任何其他情况下返回自身的函数。你需要一个递归函数。检查这个简单的例子:

// This is in maths, not C
f(x) = 2x + 1 for all integer x >= 0

在多种方式中,这种方式描述了将 0 映射到 1,然后将 1 映射到 3,然后 n2n + 1。如果我们想定义完全相同的函数 recursively :

// In maths
f(x = 0) = 1 for x = 0
f(x > 0) = f(x-1) + 2 for integer x > 0

你看到里面发生了什么吗?它表示每个后续 f(x) 都比前一个 f(x-1) 大 2。但更重要的是,该函数正在调用自身!如果仔细观察,被调用函数 f(x-1) 也会调用自身:

f(x) = f(x-1)         + 2
f(x) = f(x-2) + 2 + 2
f(x) = f(x-3) + 2 + 2 + 2
...
// all these are the same

所有这些越来越深的调用都必须在某个地方结束,而那个地方就是当 f(x-...)f(0) 时,它已经明确定义为 1

这就是递归的意义所在。让我用 C 写出上面给出的示例:

// non-recursive version
int fnonrec( int x ){
return 2 * x + 1;
}

// recursive version
int frec( int x ){
if ( x == 0 )
return 1; // explicit return value for f(0)
else // redundant else, hehe
return frec( x - 1 ) + 2;
}

函数的定义与数学中的定义非常相似,不是吗?是的,好吧,我不认为给你答案对我来说是件好事。我只能说,您可以使用递归函数很好地反向打印内容。

关于c - 在 C 中如何使用整数中最左边的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22700677/

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