2015-04-12 103 views
-1

这是spoj中“在实验室中的原子”的问题。 http://www.spoj.com/problems/ATOMS/long long int和long double的区别是什么?

下面的代码是给我TLE在SPOJ

在它明确提到,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; 
} 

而下面的代码是给予AC在SPOJ

#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; 
} 

2码之间的唯一区别是长长整型,长一倍。 任何人都可以澄清为什么发生这种情况? 在此先感谢。

回答

2

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

long double对于大双打(可包含小数)

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

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

plong long int,但使用的是%d它的时候,你应该正在使用%lld。但是你在第二个代码中解决了这个问题,所以它没有这个错误。

+0

我不明白你的解释,你能解释它与我问的相关吗? – rap

+0

@rap,我为您的代码添加了一个可能的原因 –

+0

即使它给出了scanf(“%lld”,&p); – rap

相关问题