问题描述
众所周知,GTY是一位神犇,为了更好的虐场,他从来不写数学作业而是去屠题,他的数学老师非常不爽,但由于GTY每次考试都AK,她也不能说什么,有一天老师在黑板上写了四个数—— a,b,c,d 然后让GTY比较 a 的b次和c的d次的大小,由于GTY不屑于虐这道题,就把这个问题交给你了。
输入描述
多组数据(约5000组),每组数据包含4个整数
a,b,c,d,
(1<=a,b,c,d<=1000);用空格隔开。
输出描述
对于每组数据,若 a b > c d ,输出”>”, 若 a b < c d ,输出”<”, 若 a b = c d ,输出”=”
思路,想到直接for是不现实的,所以用log来进行取对数就可以了。
但是这里有一个精度问题,即使是double算出来的也只是估计值,所以再用if判断的时候不能写成0;
#include<stdio.h> #include<math.h> int main(){ int a,b,c,d; double t1=0,t2=0; while(scanf("%d %d %d %d",&a,&b,&c,&d)!=EOF){ t1=b*1.0*log10(a*1.0); t2=d*1.0*log10(c*1.0); if(fabs(t1-t2)<1e-12) printf("=\n"); else if(t1<t2) printf("<\n"); else printf(">\n"); } }
*这是关键——所以不能直接打==,而应该|两数之差|<某个值;
今天又在网上看到了,学到了哈哈
1. 浮点型比较大小可以直接用<, >, 2. 比较相等或者不等不可以直接用==及!=。 原因:用==从语法上说没错,但是本来应该相等的两个浮点数由于计算机内部表示的原因可能略有微小的误差,这时用==就会认为它们不等。 应该使用两个浮点数之间的差异的绝对值小于某个可以接受的值来判断判断它们是否相等