В приведенном ниже примере
выходы с другим спецификатором формата
#include <stdio.h>
#include <math.h>
int main(void) {
int t,n,x,i;
long int num;
scanf("%d",&t);
while(t--){
scanf("%d",&n);num=0;
for(i=1;i<=n;i++){
scanf("%d",&x);
num=num+(x*pow(10,(n-i)));
}
printf("%ld\n",num);
}
return 0;
}
Образца занимает время 0.03s для набора входных данных.
Когда я изменил спецификатор формата от %ld
до %d
, в printf образец занял время 0,02 с для того же значения и количества ввода. В этом случае num
имеет тип long int
и оценивается в этой форме. Почему это происходит, даже если результат имеет одинаковый размер в обоих случаях?
Значит, вы не изменили 'num' в соответствии с спецификатором формата'% d'? Чтобы получить реалистичные тайминги, вам нужно многократно повторять операцию, так что это займет несколько секунд. –
@WeatherVane num остается в типе 'long int' в обоих случаях –
Что такое' sizeof (long) 'и' sizeof (int) '? Они оба «4» на моей машине. –