用c语言编写的数字反转程序

用c语言编写的数字反转程序,c,reverse,C,Reverse,我正在寻找C程序,以反转如下所示的数字: 如果我进入: 123456 那么结果将是: 654321 请帮助我。使用%10获取最后一位数字。输出它。将数字除以10,得到除最后一位以外的所有数字。使用%10获取该数字的最后一位。依此类推,直到数字变为0。使用%10获取最后一位数字。输出它。将数字除以10,得到除最后一位以外的所有数字。使用%10获取该数字的最后一位。以此类推,直到数字变为0。这是一个解决这个复杂问题的简单方法: #include <stdio.h> int main()

我正在寻找
C
程序,以反转如下所示的数字:

如果我进入:

123456

那么结果将是:

654321


请帮助我。

使用
%10
获取最后一位数字。输出它。将数字除以10,得到除最后一位以外的所有数字。使用
%10
获取该数字的最后一位。依此类推,直到数字变为0。

使用
%10
获取最后一位数字。输出它。将数字除以10,得到除最后一位以外的所有数字。使用
%10
获取该数字的最后一位。以此类推,直到数字变为0。

这是一个解决这个复杂问题的简单方法:

#include <stdio.h>

int main()
{
    int ch;
    ch = getchar();
    if (ch != '\n') {
        main();
        printf("%c", ch);
    }
}
#包括
int main()
{
int-ch;
ch=getchar();
如果(ch!='\n'){
main();
printf(“%c”,ch);
}
}

输出换行符的新版本:

#include <stdio.h>
#include <stdlib.h>

static void newline(void)
{
    printf("\n");
}

int main()
{
    int ch;
    ch = getchar();
    if (ch != '\n') {
        main();
        printf("%c", ch);
    } else {
        atexit(newline);
    }
}
#包括
#包括
静态void换行符(void)
{
printf(“\n”);
}
int main()
{
int-ch;
ch=getchar();
如果(ch!='\n'){
main();
printf(“%c”,ch);
}否则{
atexit(新线);
}
}

这是一个解决这个复杂问题的简单方法:

#include <stdio.h>

int main()
{
    int ch;
    ch = getchar();
    if (ch != '\n') {
        main();
        printf("%c", ch);
    }
}
#包括
int main()
{
int-ch;
ch=getchar();
如果(ch!='\n'){
main();
printf(“%c”,ch);
}
}

输出换行符的新版本:

#include <stdio.h>
#include <stdlib.h>

static void newline(void)
{
    printf("\n");
}

int main()
{
    int ch;
    ch = getchar();
    if (ch != '\n') {
        main();
        printf("%c", ch);
    } else {
        atexit(newline);
    }
}
#包括
#包括
静态void换行符(void)
{
printf(“\n”);
}
int main()
{
int-ch;
ch=getchar();
如果(ch!='\n'){
main();
printf(“%c”,ch);
}否则{
atexit(新线);
}
}

scanf(“%s”,a)
读取字符数组
a
中的数字,或者更好的方法是,用
strlen(a)-1
0
scanf(“%s”,a)
读取字符数组
a
中的数字,或者更好的方法是,通过输出从
strlen(A)-1开始的每个字符到
0

strev函数反转字符串,使用并输出字符数组。如果性能不是问题,那么举例来说,您可以先执行itoa,然后执行STREV,然后执行atoi。
但是,即使没有strev,任务也非常简单。

strev函数会反转字符串。如果性能不是问题,那么举例来说,您可以先执行itoa,然后执行STREV,然后执行atoi。
但是即使没有strev,任务也很简单。

如果你的教授在给你评分,那么试着在另一个问题中解决这个问题:

int FastReverse(int num) {
    int res = 0;
    int q = (int)((214748365L * num) >> 31);
    int rm = num - 10 * q;
    num = q;
    if (rm == 0) return -1;
    res = res * 10 + rm;
    while (num > 0) {
       q = (int)((214748365L * num) >> 31);
       rm = num - 10 * q;
       num = q;
       res = res * 10 + rm;
    }
    return res;
}
优化®
如果你的教授正在给你的表现评分,那么试着用另一个问题来回答这个问题:

int FastReverse(int num) {
    int res = 0;
    int q = (int)((214748365L * num) >> 31);
    int rm = num - 10 * q;
    num = q;
    if (rm == 0) return -1;
    res = res * 10 + rm;
    while (num > 0) {
       q = (int)((214748365L * num) >> 31);
       rm = num - 10 * q;
       num = q;
       res = res * 10 + rm;
    }
    return res;
}
优化®
当它是绝对的时候,肯定要在这纳秒内完成。

这里还有另一种可能性。它是非递归的,可能代码更少。代码注释中有一个示例来解释逻辑

/*
    Example: input = 12345

    The following table shows the value of input and x
    at the end of iteration i (not in code) of while-loop.
    ----------------------
    i   |   input  |    x
    ----------------------
    0       12345       0
    1        1234       5
    2         123      54
    3          12     543
    4           1    5432
    5           0   54321
    ----------------------
*/
uint32_t
reverseIntegerDigits( uint32_t input )
{
    uint32_t x = 0;

    while( input )
    {
        x = 10 * x + ( input % 10 );
        input = input / 10;
    }

    return x;
}

这是另一种可能性。它是非递归的,可能代码更少。代码注释中有一个示例来解释逻辑

/*
    Example: input = 12345

    The following table shows the value of input and x
    at the end of iteration i (not in code) of while-loop.
    ----------------------
    i   |   input  |    x
    ----------------------
    0       12345       0
    1        1234       5
    2         123      54
    3          12     543
    4           1    5432
    5           0   54321
    ----------------------
*/
uint32_t
reverseIntegerDigits( uint32_t input )
{
    uint32_t x = 0;

    while( input )
    {
        x = 10 * x + ( input % 10 );
        input = input / 10;
    }

    return x;
}

看起来像一根很旧的线。但我在这里引用了解决方案,在测试了本网站上提供的不同解决方案后,我不得不编写自己的解决方案。我意识到,如果数字以零结尾,将数字视为int将不会产生必要的数字反转。所以我决定把这个数字当作一个字符串,然后把数字倒过来。这样,我就可以从字符串的角度得到数字的精确倒数,而不是在数字的开头舍弃零的数学倒数

#include <stdio.h>
#include <string.h>

main()
{

    char num[20];
    int x=0,slen;

    printf("Enter the number you want to reverse :");
    scanf("%s",num);
    slen=strlen(num);


    char *pointertoarray = &num[slen];

    for (x=slen;x>=0; x--){ printf("%c",*pointertoarray); pointertoarray--; }
    printf("\n");

}
#包括
#包括
main()
{
字符数[20];
int x=0,slen;
printf(“输入要反转的号码:”);
scanf(“%s”,num);
slen=strlen(num);
char*pointertoarray=&num[slen];
对于(x=slen;x>=0;x--){printf(“%c”,*pointertoarray);pointertoarray--;}
printf(“\n”);
}

看起来像一条非常古老的线。但我在这里引用了解决方案,在测试了本网站上提供的不同解决方案后,我不得不编写自己的解决方案。我意识到,如果数字以零结尾,将数字视为int将不会产生必要的数字反转。所以我决定把这个数字当作一个字符串,然后把数字倒过来。这样,我就可以从字符串的角度得到数字的精确倒数,而不是在数字的开头舍弃零的数学倒数

#include <stdio.h>
#include <string.h>

main()
{

    char num[20];
    int x=0,slen;

    printf("Enter the number you want to reverse :");
    scanf("%s",num);
    slen=strlen(num);


    char *pointertoarray = &num[slen];

    for (x=slen;x>=0; x--){ printf("%c",*pointertoarray); pointertoarray--; }
    printf("\n");

}
#包括
#包括
main()
{
字符数[20];
int x=0,slen;
printf(“输入要反转的号码:”);
scanf(“%s”,num);
slen=strlen(num);
char*pointertoarray=&num[slen];
对于(x=slen;x>=0;x--){printf(“%c”,*pointertoarray);pointertoarray--;}
printf(“\n”);
}
  • 计算数字中的位数并存储在计数变量中
  • 提取变量中的单个数字
  • 使用电源功能

    while(count>=1)
    {
      var = num % 10;
      sum = sum + var * pow(10, count - 1);
      num =num / 10;
      count--;
    }
    
  • 计算数字中的位数并存储在计数变量中
  • 提取变量中的单个数字
  • 使用电源功能

    while(count>=1)
    {
      var = num % 10;
      sum = sum + var * pow(10, count - 1);
      num =num / 10;
      count--;
    }
    

  • 请学习如何明智地回答问题。看起来像一个著名的“C”面试问题:-)你现在正在面试吗?那么我们最好赶快解决你的问题。请学习如何聪明地回答问题。看起来像一个著名的“C”面试问题:-)你现在正在面试吗?那我们最好赶快解决你的问题。如果我没弄错的话,strev不是一个标准函数,可能不是所有的编译器都可以使用。是的,当然可以。在这种情况下,strrev自己的实现会有所帮助。如果我没有弄错的话,strrev不是一个标准函数,可能不会在所有编译器上都可用。是的,当然。在这种情况下,strev自己的实现会有所帮助。我想我被否决了,因为我没有打印尾随的换行符?这不是一项要求。;-)但是为什么不让它同时打印新行呢?如果你这样做,我会+1你:P。只要一张便条:打电话<