簡體   English   中英

c: 我不明白的東西

[英]c: something i don't understand

我有這個代碼:

#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=function 返回由 n 位數組成的最大數字。 例如:對於 n=1234.max 應該返回 4321,對於 n=26341,max 應該返回 64321

問題是有時編譯器可以工作,我的意思是對於某些數字,它返回我期望的值,但有時不是。 通常返回相同數量的數字,但用 9 或 4 替換 (a) digit/s ... 我無法找到解決此問題的規則。

謝謝 ! 我為 ubuntu 使用了代碼塊。

遠離pow 它是一個近似結果的浮點函數。 如果它返回的值稍微太小(比如 2.9999 而不是 3.00000),您的代碼會將其截斷為最接近的較低值 (2)。

我強烈建議使用整數或字符解決方案。

我不會給你完整的解決方案,但我會給你想法。

  • 從鍵盤掃描數字並將它們存儲在一個 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 */ }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM