反转C中整数的顺序

时间:2016-02-15 18:10:51

标签: c

我目前正在学习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读取数字并在循环中交换数字作为下面的答案。

4 个答案:

答案 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()来反转字符串。