问题描述:
输入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>
#include <stdlib.h>
int cmp(char *a,char *b)
{
int length1 = strlen(a), length2 = strlen(b), i;
if (length1>length2)
{
return 1;
}
else if (length1<length2)
{
return -1;
}
else
{
for (i=0; i < length1; i++)
{
if (a[i] < b[i]){
return -1;
}
else if (a[i] > b[i])
{
return 1;
}
}
return 0;
}
}
int main()
{
char *p[3],temp[100];
int i, j;
for (i=0; i < 3; i++)
{
p[i] = (char*)malloc(sizeof(char)*100);
scanf("%s",p[i]);
}
for (i=0; i < 3; i++)
{
for (j = i + 1; j < 3; j++)
{
if (cmp(p[i],p[j])>0)
{
strcpy(temp,p[i]);
strcpy(p[i],p[j]);
strcpy(p[j],temp);
}
}
}
for (i=0; i < 3; i++)
{
puts(p[i]);
}
return 0;
}