-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 の数字で構成される最大数を返す関数。例: n=1234 の場合、max は 4321 を返し、n=26341 の場合、max は 64321 を返す必要があります。

問題は、コンパイラが機能することがあることです。つまり、ある数値に対しては、期待する値が返されることもありますが、返されないこともあります。通常は同じ桁数を返しますが、(a) digit/s を 9 または 4 に置き換えます... この問題を解決するルールを取得できません。

ありがとうございました !ubuntuのコードブロックを使用しました。

4

2 に答える 2

1

から離れてpowください。結果を近似するのは浮動小数点関数です。少し小さすぎる値 (3.00000 ではなく 2.9999 など) を返す場合、コードはそれを最も近い低い値 (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 に答える