我目前正在学习C作为课程的一部分,我的任务是在不使用任何算术(任务的措辞)的情况下反转数字的顺序。 我目前有这个:
#include <stdio.h>
int main()
{
int n, reverse = 0;
printf("Enter a number to reverse\n");
scanf("%d", &n);
while (n != 0) {
reverse = reverse * 10;
reverse = reverse + n_10;
n = n / 10;
}
printf("Reverse of entered number is = %d\n", reverse);
return 0;
}
但是这个解决方案使用算术。我该如何改变它来完成任务呢?
从练习单中,“虽然即使在三点 数字天真的方法很快就会被算术无法管理(试试吧!)。 您的目标:在不使用任何算术的情况下设计3位数解决方案。(提示:使用scanf。)“
问题的措辞令人困惑,但很清楚问题是: 你如何扭转数字的顺序,例如123456789到987654321,没有使用数学。所以解决方案是scanf读取数字并在循环中交换数字作为下面的答案。
答案 0 :(得分:3)
您可以将其作为字符串阅读。
int main()
{
char str[80];
fgets(str, 80, stdin);
strrev(str);
printf("%s\n", str);
}
void strrev(char *str)
{
char *end, tmp;
end = str + strlen(str) - 1;
for (; end > str; --end, ++str) {
tmp = *end;
*end = *str;
*str = tmp;
}
}
我不知道你是否认为指针算法是&#34;算术&#34;
答案 1 :(得分:0)
读取为一系列短字符串,可以容纳1位数字,然后以保留顺序打印。
char buf[10][2] = { 0 };
scanf("%1[0-9]%1[0-9]%1[0-9]%1[0-9]%1[0-9]%1[0-9]%1[0-9]%1[0-9]%1[0-9]%1[0-9]",
&buf[0], &buf[1], &buf[2], &buf[3], &buf[4],
&buf[5], &buf[6], &buf[7], &buf[8], &buf[9]);
printf("%s%s%s%s%s%s%s%s%s%s",
buf[9], buf[8], buf[7], buf[6], buf[5],
buf[4], buf[3], buf[2], buf[1], buf[0]);
显然仅限于最多10位数。
由@Nisse Engström引起的拒绝方法。适用于任何合理长度的输入。
void pr(void) {
char digit[2];
if (scanf("%1[0-9]",digit)) {
pr();
printf("%s",digit);
}
}
int main(void) {
pr();
return 0;
}
输入
012345678901234567890123456789
输出
987654321098765432109876543210
当然if (scanf("%1[0-9]",digit)) {
应if (scanf("%1[0-9]",digit) == 1) {
来应对EOF
,但那可能是“算术”。
答案 2 :(得分:0)
使用scanf()
:
int
scanf (){
int
stdin =
getchar ();
return
stdin <0||
stdin ==
'\n'?
stdin :(
scanf (),
putchar (
stdin )),
'\n';}
int
main (){
putchar (
scanf ()
);}
答案 3 :(得分:-2)
读取整数,使用sprintf()函数将其转换为字符串,然后使用库函数strrev()来反转字符串。