题目描述
输入3个大整数,位数不超过100位,按从小到大的顺序输出这三个整数。要求定义并使用如下函数比较两个大整数的大小。
代码语言:javascript复制 int cmp(char *a,char *b)
{
//若大整数a大于b,返回1;
//若a小于b,返回-1;
// 若a与b相等,返回0
}
输入
输入有3行,每行输入一个大整数,位数不超过100位,输入不含前导0。
输出
输出3行,即排序后的3个大整数。
样例输入 Copy
代码语言:javascript复制1234567890123456789
99999999999999
111111111111111
样例输出 Copy
代码语言:javascript复制99999999999999
111111111111111
1234567890123456789
代码语言:javascript复制#include <stdio.h>
#include <string.h>
int cmp(char *a,char *b);
int main(){
char str[3][105];
int i,j;
for(i=0; i<3; i ){
gets(str[i]);
}
for(i=0; i<2; i ){
for(j=i 1; j<3; j )
if(cmp(str[i],str[j])==1){
char t[105];
strcpy(t,str[i]);
strcpy(str[i],str[j]);
strcpy(str[j],t);
}
}
for(i=0; i<3; i )
puts(str[i]);
return 0;
}
int cmp(char *a,char *b){//考虑正负数
int lena=strlen(a);
int lenb=strlen(b);
int flag=0,i;
if(a[0]!='-'&&b[0]!='-'){
if(lena>lenb)
{
flag = 1;
}
else if(lena<lenb){
flag = -1;
}
else{
for(i=0; i<lena; i ){
if(a[i]>b[i]){
flag = 1;
break;//判断完成,必须结束循环,否则出错
}
else if(a[i]<b[i]){
flag = -1;
break;//判断完成,必须结束循环,否则出错
}
}
}
}
if(a[0]=='-'&&b[0]=='-'){
if(lena>lenb)
flag = -1;
else if(lena<lenb)
flag = 1;
else{
for(i=0; i<lena; i ){
if(a[i]>b[i]){
flag = -1;
break;//判断完成,必须结束循环,否则出错
}
else if(a[i]<b[i]){
flag = 1;
break;//判断完成,必须结束循环,否则出错
}
}
}
}
if(a[0]!='-'&&b[0]=='-')
flag = 1;
if(a[0]=='-'&&b[0]!='-')
flag = -1;
return flag;
}