Вычислите расстояние в метрах, когда Вы будете знать долготу и широту в Java [дубликат]

Ваше предположение. Тип данных, который я использовал, имеет диапазон 0-4294967295. не является правильным. Вы определяете параметр ans как unsigned int с диапазоном 0-4294967295, но в своей функции факта вы используете int с диапазоном -2,147,483,648 to 2,147,483,647.

Таким образом, вы должны изменить свой код следующим образом:

#include
#include
unsigned int fact(unsigned int n)
{
        unsigned int result;
        if(n==0 || n==1)
                result=1;
        else
                result=n*fact(n-1);
        return result;
}
int main()
{
        unsigned int n,ans;
        printf("Enter n:");
        scanf("%u",&n);
        ans=fact(n);
        printf("Factorial of %u:%u",n,ans);
}

Вы также можете использовать unsigned long long вместо unsigned int, который будет поддерживать большие числа и больше подходит для факторного вычисления.

#include
#include
unsigned long long fact(unsigned int n)
{
        unsigned long long result;
        if(n==0 || n==1)
                result=1;
        else
                result=n*fact(n-1);
        return result;
}
int main()
{
        unsigned int n;
        unsigned long long ans;
        printf("Enter n:");
        scanf("%u",&n);
        ans=fact(n);
        printf("Factorial of %u:%u",n,ans);
}

Подробнее о типах данных и их диапазоне: https://www.tutorialspoint.com/cprogramming/c_data_types.htm

74
задан Community 23 May 2017 в 11:33
поделиться

2 ответа

Основываясь на другом вопросе о стековом потоке , я получил этот код .. Он рассчитывает результат в метрах, а не в милях:)

 public static float distFrom(float lat1, float lng1, float lat2, float lng2) {
    double earthRadius = 6371000; //meters
    double dLat = Math.toRadians(lat2-lat1);
    double dLng = Math.toRadians(lng2-lng1);
    double a = Math.sin(dLat/2) * Math.sin(dLat/2) +
               Math.cos(Math.toRadians(lat1)) * Math.cos(Math.toRadians(lat2)) *
               Math.sin(dLng/2) * Math.sin(dLng/2);
    double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
    float dist = (float) (earthRadius * c);

    return dist;
    }
181
ответ дан 24 November 2019 в 11:50
поделиться

В C ++ это делается так:

#define LOCAL_PI 3.1415926535897932385 

double ToRadians(double degrees) 
{
  double radians = degrees * LOCAL_PI / 180;
  return radians;
}

double DirectDistance(double lat1, double lng1, double lat2, double lng2) 
{
  double earthRadius = 3958.75;
  double dLat = ToRadians(lat2-lat1);
  double dLng = ToRadians(lng2-lng1);
  double a = sin(dLat/2) * sin(dLat/2) + 
             cos(ToRadians(lat1)) * cos(ToRadians(lat2)) * 
             sin(dLng/2) * sin(dLng/2);
  double c = 2 * atan2(sqrt(a), sqrt(1-a));
  double dist = earthRadius * c;
  double meterConversion = 1609.00;
  return dist * meterConversion;
}
4
ответ дан 24 November 2019 в 11:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: