CSU Problem 1777 大还是小?——湖南省第十一届大学生计算机程序设计竞赛
来源:互联网 发布:自定义域名 编辑:程序博客网 时间:2024/05/17 17:18
此文章可以使用目录功能哟↑(点击上方[+])
CSU Problem 1777 大还是小?
Accept: 0 Submit: 0
Time Limit: 1 Sec Memory Limit : 128 MB
Problem Description
输入两个实数,判断第一个数大,第二个数大还是一样大。每个数的格式为:
[整数部分].[小数部分]
简单起见,整数部分和小数部分都保证非空,且整数部分不会有前导 0。不过,小数部分的最 后可以有 0,因此 0.0 和 0.000 是一样大的。
Input
输入包含不超过 20 组数据。每组数据包含一行,有两个实数(格式如前所述)。每个实数都 包含不超过 100 个字符。
Output
对于每组数据,如果第一个数大,输出"Bigger"。如果第一个数小,输出"Smaller"。如果两个 数相同,输出"Same"。
Sample Input
0.00001 0.00000
0.0 0.000
Sample Output
Case 2: Bigger
Case 3: Same
Hint
Problem Idea
解题思路:
【题意】
给你两个包含不超过100个字符的实数
要求比较它们的大小关系
【类型】
字符串函数应用(strlen,strcpy,strcmp)
【分析】
首先,此题有个小bug,就是你直接用%lf输入这两个实数,然后直接用'>','<'比较大小也能过此题
即如下这种代码:
int main(){ double a,b; int p=1; while(~scanf("%lf%lf",&a,&b)) { printf("Case %d: ",p++); if(a>b) puts("Bigger"); else if(a<b) puts("Smaller"); else puts("Same"); } return 0;}但显然这种方法是不对的
由此可见,我们已经对此方法举出反例
接着,我们来讲讲正确的做法
先把实数拆成整数部分和小数部分
那么两数比较大小可以先比较整数部分,如果整数部分不一样,显然不需要再比较小数部分
而整数部分的比较,你可以遍历一遍去比较,也可以像本人一样,采用strcmp函数直接比较
若整数部分相等时,才去考虑小数部分的比较
此时,为了便于使用strcmp函数进行小数部分比较,我们需将俩实数的小数部分位数补齐
比如实数0.0123和实数0.0000520
我们则需要补齐成实数0.0123000和实数0.0000520,然后比较
于是,此题得解
【时间复杂度&&优化】
O(n)
题目链接→CSU Problem 1777 大还是小?
Source Code
/*Sherlock and Watson and Adler*/#pragma comment(linker, "/STACK:1024000000,1024000000")#include<stdio.h>#include<string.h>#include<stdlib.h>#include<queue>#include<stack>#include<math.h>#include<vector>#include<map>#include<set>#include<bitset>#include<cmath>#include<complex>#include<string>#include<algorithm>#include<iostream>#define eps 1e-9#define LL long long#define PI acos(-1.0)#define bitnum(a) __builtin_popcount(a)using namespace std;const int N = 105;const int M = 100005;const int inf = 1000000007;const int mod = 1000003;char a[N],b[N],c[N],d[N];int main(){ int p=1,i,j,Max; while(~scanf("%s%s",a,b)) { Max=max(strlen(a),strlen(b)); for(i=strlen(a);i<Max;i++) a[i]='0'; for(j=strlen(b);j<Max;j++) b[j]='0'; a[i]=b[j]='\0'; printf("Case %d: ",p++); for(i=0;a[i]!='.';i++); for(j=0;b[j]!='.';j++); a[i]=b[j]='\0'; strcpy(c,a+i+1); strcpy(d,b+j+1); if(strcmp(a,b)>0) puts("Bigger"); else if(strcmp(a,b)<0) puts("Smaller"); else { if(strcmp(c,d)>0) puts("Bigger"); else if(strcmp(c,d)<0) puts("Smaller"); else puts("Same"); } } return 0;}菜鸟成长记
- CSU Problem 1777 大还是小?——湖南省第十一届大学生计算机程序设计竞赛
- 湖南省第十一届大学生计算机程序设计竞赛—大还是小?
- CSU Problem 1785 又一道简单题——湖南省第十一届大学生计算机程序设计竞赛
- CSU Problem 1779 错误的算法——湖南省第十一届大学生计算机程序设计竞赛
- CSU Problem 1781 阶乘除法——湖南省第十一届大学生计算机程序设计竞赛
- CSU Problem 1780 简单的图论问题?——湖南省第十一届大学生计算机程序设计竞赛
- HNNU 11654 大还是小?【 湖南省第十一届大学生计算机程序设计竞赛,Java大数比较】
- 湖南省第十一届大学生计算机程序设计竞赛—阶乘除法
- 湖南省第十一届大学生计算机程序设计竞赛—E
- CSU Problem 1803 2016(同余定理)——湖南省第十二届大学生计算机程序设计竞赛
- CSU Problem 1100 一二三——湖南省第七届大学生计算机程序设计竞赛
- CSU Problem 1809 Parenthesis(括号匹配,线段树,前缀和)——湖南省第十二届大学生计算机程序设计竞赛
- CSU 1781: 阶乘除法 (思维) 湖南省第十一届大学生计算机程序设计竞赛
- 湖南省第十一届大学生计算机程序设计竞赛—错误的算法
- csu 2016年湖南省第十二届大学生计算机程序设计竞赛Problem A 2016
- 湖南省第十一届大学生计算机程序设计竞赛 Problem H 聊天止于呵呵(字符串处理)
- 湖南省第十一届大学生计算机程序设计竞赛 部分题解 待续
- 湖南省第十一届大学生计算机程序设计竞赛 错误的算法
- 数组中的元素排序和去重总结
- ARGB 颜色取值与透明度搭配
- 有关Unix或者linux的知识
- Pytyhon 爬虫-爬取阿里旅行特价机票信息(3)——完结
- Java 中integer与int的区别
- CSU Problem 1777 大还是小?——湖南省第十一届大学生计算机程序设计竞赛
- 线性回归算法
- oracle学习分页存储过程和jdbc调用
- xml命名空间
- 【电脑常识】任务管理器快捷键
- 10,指针
- JS阻止事件冒泡的几种方式
- Assert在web开发中的应用
- 对象的定义