长整和长双打有什么区别

whats the difference between long long int and long double?

本文关键字:什么 区别      更新时间:2023-10-16

这是spoj"实验室中的原子"中的问题 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("%lldn",ans-1);
        else
            printf("0n");
    }
    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("%lldn",ans-1);
        else
            printf("0n");
    }
    return 0;
}

这两个代码之间的唯一区别是长整型和长双精度。谁能澄清我为什么会发生这种情况?提前谢谢。

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

long double 适用于大双精度(可以包含小数)

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

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

p是一个long long int,但是当你应该使用%lld时,你正在使用%d。但是您在第二个代码中修复了它,因此它没有该错误。