简体   繁体   English

在不使用内置反向功能的情况下反转C中的数字

[英]Reversing numbers in C without using built in reverse function

I've been given a problem in class and to solve it I can't use the built in functions that already exist in c. 我在课堂上遇到了问题,为了解决这个问题,我不能使用c中已经存在的内置函数。 It has to be an algorithm that performs the action. 它必须是执行操作的算法。 My function is below: 我的功能如下:

int reverseDigits(int userNumber)
{

    int rev1, rev2, rev3, rev4, reverseNumber;

    rev1 = userNumber/1000;

    rev2 = (userNumber - (rev1 * 1000)) / 100;

    rev3 = (userNumber - ((rev1 * 1000) + ( rev2 * 100))) / 10;

    rev4 = (userNumber - ((rev1 *1000) + (rev2 * 100) + (rev3 * 10))) / 1;


    if (rev1 == 0 && rev2 >= 1)
    {
        reverseNumber = ((rev2 *100) + (rev3 *10) + (rev1 * 1));
        return reverseNumber;
    }

    else if (rev2 == 0 && rev3 >= 1)
    {
        reverseNumber = ((rev3 * 10) + (rev1 * 1));
    }

    else if (rev3 == 0 && rev4 >= 1)
    {
        reverseNumber = (rev4 * 1);
    }

    else 
    {
        reverseNumber = ((rev4 * 1000) + (rev3 * 100) + (rev2 * 10) + (rev1 * 1));
        return reverseNumber;
    }


}

The function gets a user input and reverses it. 该函数获取用户输入并将其反转。 My problem is that when given any number with less than 4 digits (It's only supposed to receive 4) the function returns them correctly but it adds zeros. 我的问题是,当给出任何小于4位数的数字(它只应该接收4位数)时,该函数会正确返回它们,但它会添加零。 For instance I send it 678 it will return 8760 or 57 would be 7500. Thanks for any help. 例如,我发送它678它将返回8760或57将是7500.感谢您的帮助。

This will work up to 9 digits. 这最多可以达到9位数。

int reverse(int num)
{
    int res = 0, tmp;
    while(num != 0)
    {
        tmp = num % 10;
        res = res*10 + tmp;
        num /= 10;
    }
    return res;
}

The problem is in the invalid set of if-else statements. 问题出在if-else语句的无效集合中。

Using your approach the program can look like 使用您的方法,程序可以看起来像

#include <stdio.h>

int reverseDigits( int userNumber )
{

    int rev1, rev2, rev3, rev4, reverseNumber;

    rev1 = userNumber / 1000;

    rev2 = ( userNumber - ( rev1 * 1000 ) ) / 100;

    rev3 = ( userNumber - ( ( rev1 * 1000 ) + ( rev2 * 100 ) ) ) / 10;

    rev4 = ( userNumber - ( ( rev1 * 1000 ) + ( rev2 * 100 ) + ( rev3 * 10 ) ) ) / 1;


    if ( rev1 != 0 )
    {
        reverseNumber = ( rev1 * 1 ) + ( rev2 * 10 ) + ( rev3 * 100 ) + ( rev4 * 1000 ); 
    }
    else if ( rev2 != 0 )
    {
        reverseNumber = ( rev2 * 1 ) + ( rev3 * 10 ) + ( rev4 * 100 ); 
    }
    else if ( rev3 != 0  )
    {
        reverseNumber = ( rev3 * 1 ) + ( rev4 * 10 ); 
    }
    else 
    {
        reverseNumber = ( rev4 * 1 ); 
    }

    return reverseNumber;

}

int main( void ) 
{
    for ( unsigned int x = 0, n = 1000; n != 0; n /= 10 )
    {
        x += n;
        printf( "%d\t%d\n", x,  reverseDigits( x ) );
    }

    return 0;
}

Its output is 它的输出是

1000    1
1100    11
1110    111
1111    1111

This should do: 这应该做:

int main()
{
    int num,i=0;
    scanf("%d",&num);

    int digit[4]={0};
    int num_digits=0;

    while(num!=0)
    {
         digit[num_digits] = num%10;
         num = num/10;
         num_digits++;
    }

    for(i=0;i<num_digits;i++)
    {
        printf("%d",digit[i]);
    }

    return 0;
 }

This can help you edit any number, with any number of digits. 这可以帮助您编辑任意数字,任意数字。 Just increase the array size of digit . 只需增加digit的数组大小。

Edit :Iterator mistaked edited. 编辑:Iterator错误编辑。

Errors in posted code 发布代码中的错误

  1. The computation under the first if clause is wrong. 第一个if子句下的计算是错误的。 Instead of 代替

     reverseNumber = ((rev2 *100) + (rev3 *10) + (rev1 * 1)); 

    it needs to be 它需要

     reverseNumber = ((rev4 *100) + (rev3 *10) + (rev2 * 1)); 
  2. The computation under the first else if clause is wrong. 第一个else if子句下的计算是错误的。 Instead of 代替

     reverseNumber = ((rev3 * 10) + (rev1 * 1)); 

    it needs to be 它需要

     reverseNumber = ((rev4 * 10) + (rev3 * 1)); 
  3. You are missing return statements in the two else if clauses. 您在else if两个else if子句中缺少return语句。 As a consequence, if your program gets into those clauses, no return statement is executed and the program has undefined behavior. 因此,如果您的程序进入这些子句,则不会执行return语句,并且程序具有未定义的行为。 You can resolve that by removing the return statements you have now and adding a return statement at the end. 您可以通过删除解决return现在你有陈述和添加return在最后陈述。

     if (rev1 == 0 && rev2 >= 1) { reverseNumber = ((rev4 *100) + (rev3 *10) + (rev2 * 1)); } else if (rev2 == 0 && rev3 >= 1) { reverseNumber = ((rev4 * 10) + (rev3 * 1)); } else if (rev3 == 0 && rev4 >= 1) { reverseNumber = (rev4 * 1); } else { reverseNumber = ((rev4 * 1000) + (rev3 * 100) + (rev2 * 10) + (rev1 * 1)); } return reverseNumber; 

A recursive solution 递归解决方案

If you are able to use recursive functions, you can use: 如果您能够使用递归函数,则可以使用:

int reverseDigits2(int userNumber, int res)
{
   if ( userNumber == 0 )
   {
      return res;
   }

   return reverseDigits2(userNumber/10, 10*res + (userNumber%10)); 
}

int reverseDigits(int userNumber)
{
   return reverseDigits2(userNumber, 0);
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM