我有这段代码:
#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的数字组成。 E.G:对于n = 1234.max应返回4321,对于n = 26341,max应返回64321
问题是有时候编译器工作,我的意思是对于某些数字它会返回我期望的值,但有时不会。通常返回相同的数字位数,但用9或4替换(a)数字/ s ...我无法解决此问题。
谢谢!我为ubuntu使用了代码块。
答案 0 :(得分:1)
远离pow
。它是一个浮点函数,近似结果。如果它返回的值稍微过小(例如2.9999而不是3.00000),则代码会将其截断为最接近的较低值(2)。
我强烈建议使用整数或字符解决方案。
答案 1 :(得分:0)
我不会给你整个解决方案,但我会给你一个想法。
打印数组,处理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 */
}