c:我不明白的事情

时间:2012-11-14 08:56:57

标签: c

我有这段代码:

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

int i,j;
long int maxc=0,nn;

long int max(long int n)
{
    maxc=0;nn=n;i=1;

    if(n<10 && n>=0) 
        return n;

    while(nn!=0)
    {
        if(maxc<nn%10) 
        { 
            maxc=nn%10;
            j=i;
        }
        i++;
        nn/=10;
    }

    return maxc*(pow(10,i-2))+max(n/(pow(10,j))*(pow(10,j-1))+n%((int)pow(10,j-1)));
}

int main()
{
    long int n;
    printf("Dati n: ");
    scanf("%d",&n);
    printf("%ld",max(n));
    return 0;
}

n =用户给出的数字 max =返回最大数字的函数由n的数字组成。 E.G:对于n = 1234.max应返回4321,对于n = 26341,max应返回64321

问题是有时候编译器工作,我的意思是对于某些数字它会返回我期望的值,但有时不会。通常返回相同的数字位数,但用9或4替换(a)数字/ s ...我无法解决此问题。

谢谢!我为ubuntu使用了代码块。

2 个答案:

答案 0 :(得分:1)

远离pow。它是一个浮点函数,近似结果。如果它返回的值稍微过小(例如2.9999而不是3.00000),则代码会将其截断为最接近的较低值(2)。

我强烈建议使用整数或字符解决方案。

答案 1 :(得分:0)

我不会给你整个解决方案,但我会给你一个想法。

  • 扫描键盘上的数字并将它们存储在long int变量中。
  • 将数字转换为数组中的字符。 (不要忘记ASCII码)。
  • 按降序对数组进行排序。
  • 打印数组,处理ASCII码(在我的例子中,我存储的值不是字符,这就是为什么我可以将它们打印为%d)。

    /* Prototypes*/
    int stringConverter( char const * a, long int val );
    void decsort( int * const a, int digits);
    
    int main( void )
    {
        char a[ SIZE ];
        int digits;
        long int val;
    
        printf( "Enter the number: " );
        scanf( "%ld", &val );
    
        digits = stringConverter( a, val );
        decsort( a, digits );
    
            /* Printer */
            for( i = SIZE - digits - 1; i < SIZE; i++){
                printf( "%d", a[ i ] );
            }
            return 0;
    }
    
    
    int stringConverter( char * const a, long int val )
    {
        int i, int j = 0;
    
        for( i = ( SIZE - 1 ); i >= 0; i-- ){
            *( a + i ) = ( val % 10 );
            j++;
            val = val / 10;
    
            if( val < 10 ){
                i--;
                *( a + i ) = val;
                j++;
                break;
            }
        }
        return j;
    }
    
    
    
    void decsort( char * const a, int digits ){
    /* Any sort */
    }