题目描述
输入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<stdio.h>
#include<string.h>
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;
}
提交结果: