ZZULIOJ 1169: 大整數(指標專題)
阿新 • • 發佈:2019-01-06
題目描述輸入3個大整數,位數不超過100位,按從小到大的順序輸出這三個整數。要求定義並使用如下函式比較兩個大整數的大小。
int cmp(char *a,char *b)
{
//若大整數a大於b,返回1;
//若a小於b,返回-1;
// 若a與b相等,返回0
}
輸入輸入有3行,每行輸入一個大整數,位數不超過100位,輸入不含前導0。
輸出輸出3行,即排序後的3個大整數。
樣例輸入1234567890123456789
99999999999999
111111111111111
樣例輸出99999999999999
111111111111111
1234567890123456789
#include<stdio.h>
#include<string.h>
int bj(char* a,char* b);
int main(){
char a[110],b[110],c[110],max[110];
scanf("%s%s%s",a,b,c);
if(bj(a,b)==1)
strcpy(max,a),strcpy(a,b),strcpy(b,max);
if(bj(a,c)==1)
strcpy(max,a),strcpy(a,c),strcpy(c,max);
if (bj(b,c)==1)
strcpy(max,b),strcpy(b,c),strcpy(c,max);
printf("%s\n%s\n%s\n",a,b,c);
return 0;
}
int bj(char* a,char* b){
int len1=strlen(a),len2=strlen(b);
if(a[0]=='-'&&b[0]!='-')return -1; // a<b
else
if(a[0]!='-'&&b[0]=='-')return 1; // a>b
else
if(a[0]=='-'&&b[0]=='-'){
if(len1>len2) return -1; // a<b
else if(len2>len1) return 1; //a>b
else {
if(strcmp(a,b)>0) return -1;
else if(strcmp(a,b)<0) return 1;
else return 0;
}
}
if(a[0]!='-'&&b[0]!='-'){
if(len1<len2) return -1; // a<b
else if(len2<len1) return 1; //a>b
else {
if(strcmp(a,b)<0) return -1; //a<b
else if(strcmp(a,b)>0) return 1; //a>B
else return 0;
}
}
}