-1

我有这个代码:

#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 的数字组成。EG:对于 n=1234.max 应该返回 4321,对于 n=26341,max 应该返回 64321

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

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

4

2 回答 2

1

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

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

于 2012-11-14T09:42:54.413 回答
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 */
    }
    
于 2012-11-14T11:32:49.673 回答