题目描述
输入3个大整数,位数不超过100位,按从小到大的顺序输出这三个整数。要求定义并使用如下函数比较两个大整数的大小。
int cmp(char *a,char *b)
{
//若大整数a大于b,返回1;
//若a小于b,返回-1;
// 若a与b相等,返回0
}
输入
输入有3行,每行输入一个大整数,位数不超过100位,输入不含前导0。
输出
输出3行,即排序后的3个大整数。
样例输入 Copy
1234567890123456789 99999999999999 111111111111111
样例输出 Copy
99999999999999 111111111111111 1234567890123456789
问题分析:
在函数中将两个字符串传进来,判断大小时先判断长度,长度大的字符串大(因为字符串表示的是一个数),当长度一样时用strcmp函数比较两字符串的大小即可。根据字符串之间的关系返回值。在输出之前将每一个字符串当作一个元素进行冒泡排序,排序时比较时用我们写的cmp()函数,作为排序的条件,strcpy(s【3】,s【i】)其中s【3】是定义的额外数组来作为交换的中间变量,strcpy(s【i】,s【k】),strcpy(s【k】,s【3】)这样就写成了选择排序。
代码实现:
- #include
- #include
- int cmp(char *a,char *b){
- if(strlen(a)<strlen(b)){
- return -1;
- }else if(strlen(a)>strlen(b)){
- return 1;
- }else{
- if(strcmp(a,b)>0){
- return 1;
- }else if(strcmp(a,b)<0){
- return -1;
- }else{
- return 0;
- }
- }
- }
- int main(){
- char s[4][101];
- int j=0;
- for(int i=0;i<3;i++){
- gets(s[i]);
- }
- for(int i=0;i<2;i++){
- for(int k=i;k<3;k++){
- if(cmp(s[i],s[k])>=0){
- strcpy(s[3],s[i]);
- strcpy(s[i],s[k]);
- strcpy(s[k],s[3]);
- }
- }
- }
- for(int i=0;i<3;i++){
- puts(s[i]);
- }
- return 0;
- }
提交结果: