[英]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)。
我強烈建議使用整數或字符解決方案。
我不會給你完整的解決方案,但我會給你想法。
打印處理 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.