c:我不知道的事';我不明白

c:我不知道的事';我不明白,c,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) { i

我有以下代码:

#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;
}
#包括
#包括
#包括
int i,j;
长整数maxc=0,nn;
长整数最大值(长整数n)
{
maxc=0;nn=n;i=1;
如果(n=0)
返回n;
while(nn!=0)
{

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


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

我不会给出完整的解决方案,但我会给出您的想法

  • 扫描键盘上的数字,并将其存储在长整型变量中
  • 将数字转换为数组中的字符。(不要忘记ASCII码)
  • 按降序对数组进行排序
  • 打印数组时要考虑ASCII码(在我的示例中,我存储的是值而不是字符,这就是为什么我可以将它们打印为%d)

    /*原型*/
    int-stringConverter(字符常量*a,长int-val);
    void decort(整数*常数a,整数位数);
    内部主(空)
    {
    字符a[大小];
    整数位数;
    长整数;
    printf(“输入数字:”);
    scanf(“%ld”和&val);
    数字=字符串转换器(a,val);
    decort(a,数字);
    /*印刷机*/
    对于(i=大小-位数-1;i<大小;i++){
    printf(“%d”,a[i]);
    }
    返回0;
    }
    整型字符串转换器(字符*常量a,长整型值)
    {
    int i,int j=0;
    对于(i=(大小-1);i>=0;i--){
    *(a+i)=(val%10);
    j++;
    val=val/10;
    如果(val<10){
    我--;
    *(a+i)=val;
    j++;
    打破
    }
    }
    返回j;
    }
    void decort(字符*常量a,整数位数){
    /*随便*/
    }
    

您应该使用
fscanf
而不是
scanf
(=看起来很糟糕。为什么不将输入读取为字符串,然后进行排序?
/* 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 */
}