c - C 中整数的顺序颠倒

标签 c

我目前正在学习 C 作为类(class)的一部分,我的任务是在不使用任何算术的情况下反转数字的顺序(任务的措辞)。 我目前有这个:

#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 读取数字并循环交换数字,如下答案。

最佳答案

您可以将其作为字符串读取。

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;
    }
}

不知道你是否认为指针算术是“算术”

关于c - C 中整数的顺序颠倒,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35416225/

相关文章:

c - 在命令行程序中将选项与非选项参数分开

c - 使用某种互斥体或信号量机制保护警报和 sleep

c - 控制台应用程序中的输入事件循环

c - 从 C 套接字读取预期数据包的最大大小

c++ - C++11 是否支持 C11 的新特性?

c - 如果超过数组大小怎么办,如何打印错误信息?并终止程序

c - _setmode 函数导致调试错误

iphone - 如何将用 C 编写的现有项目与基于 iphone View 的应用程序项目集成?

c - 使用递归判断两个数组是否相互排列

c - 字符串数组 malloc 后出现 "error reading characters of string"错误