我也是醉了,还有两天就要考试了(当然了,我也是准备考湖大的829的)才发现这题目,我居然没有做过。然后百度,Google了一下,也没有热心人给出答案,看到一个知乎上的朋友发出求助,结果下面的沙发、看客表示收费解答。没办法,只能自己来动手了。
首先,题目是这样的:
给一个四位数,先判断是不是11的整数倍,若是则输出,不是就把四位数重新排列,在形成的新的四位数中判断是不是11的整数倍,若是则存到文件”output.dat”;然后再求文件”output.dat”中最大的数,输出。
由于对文件操作不熟,所以对于从文件中取出最大的那个数,我就没有按题目要求给出了。
void main(){
int x=8912, reverse; //8912
if( x%11 == 0 ){
printf("result:%d\n", x);
}else{
int m[4],i=0, ret[6], j=0, max=0;
for( ; i<4; i++){
m[i] = x%10;
x = x/10;
}
if( m[0] == m[1] && m[0] == m[2] && m[0] == m[3] ){
return ; // 4 same integer
}
FILE* fp = fopen("output.dat", "w+");
if( fp == NULL ){
printf("file open failure!\n");
return ;
}
i = 0;
while( i<4 ){
memset(ret, 1, sizeof(ret));
if( m[0] != 0 ){
ret[0] = m[0]*1000 + m[1]*100 + m[2]*10 + m[3];
ret[1] = m[0]*1000 + m[1]*100 + m[3]*10 + m[2];
ret[2] = m[0]*1000 + m[2]*100 + m[1]*10 + m[3];
ret[3] = m[0]*1000 + m[2]*100 + m[3]*10 + m[1];
ret[4] = m[0]*1000 + m[3]*100 + m[1]*10 + m[2];
ret[5] = m[0]*1000 + m[3]*100 + m[2]*10 + m[1];
for(j=0; j<6; j++){
if( ret[j]%11 == 0 ){
fprintf(fp, "%d", ret[j]);
fprintf(fp, "%c", ' ');
if(max<ret[j])
max = ret[j];
}
}
}
int tmp = m[0]; m[0] = m[i]; m[i++] = tmp;
}
fclose(fp);
printf("final result:%d\n", max);
}
}