1169:题目描述
输入3个非负大整数,位数不超过100位,按从小到大的顺序输出这三个整数。要求定义并使用如下函数比较两个大整数的大小。
int cmp(char *a,char *b)
{
//若大整数a大于b,返回1;
//若a小于b,返回-1;
// 若a与b相等,返回0
}
输入
输入有3行,每行输入一个大整数,位数不超过100位,输入不含前导0。
输出
输出3行,即排序后的3个大整数。
答案:
#include<stdio.h>
#include<string.h>
int main()
{
int cmp(char *a,char *b);
char a[3][100],s[100];
int i,j;
for(i=0; i<3; i++)
gets(a[i]);
for(i=0; i<3; i++) //对每一个字符串做冒泡排序
{
for(j=0; j<2-i; j++)
{
if(cmp(a[j],a[j+1])==1)
{
strcpy(s,a[j]);
strcpy(a[j],a[j+1]);
strcpy(a[j+1],s);
}
}
}
for(i=0; i<3; i++)
printf("%s\n",a[i]);
return 0;
}
int cmp(char *a,char *b)
{
int len1,len2,i;
len1=strlen(a);
len2=strlen(b);
if(len1>len2)
return 1;
else if(len1<len2)
return -1;
else
for(i=0; i<len1; i++)
if(*(a+i)>*(b+i))
return 1;
else if(*(a+i)<*(b+i))
return -1;
return 0;
}
改
#include<stdio.h>
#include<math.h>
#include <string.h>
int main()
{
int ncase,n,j,x,i,k;
double y[100],sum=0;
char a[100][201];
scanf("%d",&ncase);
while(ncase--)
{
sum=0;
//printf("%20.1lf*********\n",sum);
scanf("%d\n",&n);
for(i=0; i<n; i++){
gets(a[i]);
int length=strlen(a[i]);//求字符串的长度
double m=0;
int count1=0,count2=0;
int k;
//从后面向前找到第一个不是数字的字符
for(k=length-1;isdigit(a[i][k])||a[i][k]=='.';k--);
//下标是k的位置不是字符,k+1之后就是数字或小数点
k=k+1;
while(a[i][k]!='\0'){
if(a[i][k]=='.'){
count2=0;//遇到小数点count2=0;
}else{
x=a[i][k]-48;
m=x+m*10;
}
count1++;
count2++;
k++;
}
if(count1!=count2){// count1==count2表示这是一个整数
if(count2==2)m=m/10; //因为小数点时count2也加1了,所以count2的值比小数位多1
if(count2==3)m=m/100;
}
sum=sum+m;
}
printf("%-20.1lf\n",sum);
}
return 0;
}