| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
ac了/乐,不过也ft了,居然要先四舍五入再和100去比In Reply To:投降了,贴一下代码,过了的帮个忙吧? Posted by:frkstyc at 2005-03-30 08:41:29 > #include <stdio.h>
> #include <math.h>
> #include <float.h>
>
> const double sec = 4.8481368110953599358991410235795e-6;
> const double radius = 6875.0 / 2;
>
> int main(void)
> {
> char line[80];
> double lat, lng, th, dist;
> double x1, y1, z1;
> double x2, y2, z2;
> int d, m, s;
> char c;
> _controlfp(PC_64, MCW_PC);
> while(scanf("%s", line), line[0] == 'M')
> {
> gets(line);
> gets(line);
> gets(line); //弄掉前三行
> scanf("%d^%d'%d\" %c", &d, &m, &s, &c);
> s += m * 60 + d * 3600;
> lat = s * sec;
> if(c == 'S')
> {
> lat = -lat;
> }
> gets(line);
> scanf("and %d^%d'%d\" %c", &d, &m, &s, &c);
> s += m * 60 + d * 3600;
> lng = s * sec;
> if(c == 'W')
> {
> lng = -lng;
> }
> x1 = cos(lat) * cos(lng);
> y1 = cos(lat) * sin(lng);
> z1 = sin(lat);//球坐标到直角坐标
> gets(line);
> gets(line);
> scanf("%d^%d'%d\" %c", &d, &m, &s, &c);
> s += m * 60 + d * 3600;
> lat = s * sec;
> if(c == 'S')
> {
> lat = -lat;
> }
> gets(line);
> scanf("and %d^%d'%d\" %c", &d, &m, &s, &c);
> s += m * 60 + d * 3600;
> lng = s * sec;
> if(c == 'W')
> {
> lng = -lng;
> }
> x2 = cos(lat) * cos(lng);
> y2 = cos(lat) * sin(lng);
> z2 = sin(lat);
> th = acos(x1 * x2 + y1 * y2 + z1 * z2);//求夹角
> dist = th * radius;
> dist = 0.01 * floor(dist * 100.0);//correct to是截尾吧?
> gets(line);
> gets(line);
> printf("The distance to the iceberg: %.2lf miles.\n", dist);
> if(dist < 100.0)
> {
> puts("DANGER!");
> }
> }
> return 0;
> }
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator