什么是long long int和long double之间的区别?

时间:2015-04-12 17:56:43

标签: c++

这是实验室中的原子问题" http://www.spoj.com/problems/ATOMS/

以下代码在spoj

中给了我 tle

在问题中,它清楚地提到n,m,k是整数。

#include <iostream>
#include <algorithm>
#include <stdio.h>
#include <complex>
#define ll long long int
using namespace std;
int main()
{
    ll p;
    scanf("%lld",&p);
    while(p--)
    {
        ll n,m,k;
        ll ans=0;
        scanf("%lld%lld%lld",&n,&k,&m);
        while(n<=m)
        {
            ans++;
            n*=k;
        }
        if(ans>0)printf("%lld\n",ans-1);
        else
            printf("0\n");

    }
    return 0;
}

而下面的代码在spoj中提供 Ac

#include <iostream>
#include <algorithm>
#include <stdio.h>
#include <complex>
#define ll long long int
using namespace std;
int main()
{
    ll p;
    scanf("%lld",&p);
    while(p--)
    {
        long double n,m,k;
        ll ans=0;
        scanf("%Lf%Lf%Lf",&n,&k,&m);
        while(n<=m)
        {
            ans++;
            n*=k;
        }
        if(ans>0)printf("%lld\n",ans-1);
        else
            printf("0\n");

    }
    return 0;
}

两个代码之间的唯一区别是long long int和long double。 任何人都可以澄清为什么会这样吗? 提前谢谢。

1 个答案:

答案 0 :(得分:2)

long long int适用于大整数(不能包含小数)。

long double适用于大型双打(可包含小数)

而且,您的第一个代码的问题可能是

ll p;
scanf("%d",&p);

plong long int,但是当您使用%d时,您正在使用%lld。但是你在第二个代码中修复了它,所以它没有那个错误。