Description
求出一些整数中的最大值和最小值。
Input
输入为多行,以EOF结束。每行为一个十进制的数字,全部由0~9组成,每行最长不超过1000个字符。有些数字会以0开头(不影响数值大小的前导0)。
Output
输出为输入中的最大值和最小值,格式见sample。
Sample Input
02010001201223
Sample Output
The maximum value is : 23The minimum value is : 2
HINT
由于输入已经超过64bit整数的数值上限,因此应该用字符串把输入存储下来,进行大小的判断。
#include <stdio.h> #include <stdlib.h> #include <string.h> int main() { char max[2000]; char min[2000],temp[2000]; int flag=1; int m,n; int low,high; while(scanf("%s",temp)!=EOF){ m=strlen(temp); n=0; for(n=0;temp[n]=='0'&&n<m;n++); m-=n; //求出第一非0位置 if(m==0){ temp[0]='0'; temp[1]=0; n=0; }//如果输入的字符串为全0 if(flag==1){ strcpy(max,&temp[n]); strcpy(min,&temp[n]); low=m; high=m; flag=0; }//第一轮进入后使其变为最大最小字符串均为进入的字符串 if(m<low){ low=m; strcpy(min,&temp[n]); } if(m>high){ high=m; strcpy(max,&temp[n]); }//长度大于或小于直接交换 if(m==low){ if(strcmp(&temp[n],min)<0){ strcpy(min,&temp[n]); } } if(m==high){ if(strcmp(&temp[n],max)>0) strcpy(max,&temp[n]); } } printf("The maximum value is : %s\n",max); printf("The minimum value is : %s\n",min); return 0; }