HDU2057(__int64 与long long 的区别)

来源:互联网 发布:专业电气制图软件 编辑:程序博客网 时间:2024/04/28 12:51

问题链接:HDU2057 A + B Again。入门训练题,用C语言编写程序。

投机取巧,按照许多人的做法来做,程序是AC了。即便如此,也是一脸困惑,不知道解了这种题意义何在?因为定义变量的类型是__int64,十分的不满意。还是希望用long long定义变量,但是输入输出格式。

看一下下表,可以知道__int64 与long long 的区别。

变量定义输出方式gcc(mingw32)g++(mingw32)gcc(linux i386)g++(linux i386)MicrosoftVisual C++ 6.0long long“%lld”错误错误正确正确无法编译long long“%I64d”正确正确错误错误无法编译__int64“lld”错误错误无法编译无法编译错误__int64“%I64d”正确正确无法编译无法编译正确long longcout非C++正确非C++正确无法编译__int64cout非C++正确非C++无法编译无法编译long longprintint64()正确正确正确正确无法编译

计算机语言如果不标准,累死程序员。C99标准已经有了long long类型,使用该类型才是正解。

从批判中学习,付出高昂学费得到的是教训,不是正确的途径,是在浪费时间。

后来,经过一番研究,终于搞定了正解程序。那里需要注意的是,输出变量的时候,要用“%llX”,不要用“%llx”。这二者之间有微妙的差异。

AC程序如下(正解):

[cpp] view plain copy
print?
  1. /* HDU2057 A + B Again */  
  2.   
  3. #include <stdio.h>  
  4.   
  5. int main(void)  
  6. {  
  7.     long long a, b, result;  
  8.   
  9.     while(scanf("%llx %llx", &a, &b) != EOF) {  
  10.         result = a + b;  
  11.   
  12.         if (result >= 0)  
  13.             printf("%llX\n", result);  
  14.         else  
  15.             printf("-%llX\n", -result);  
  16.     }  
  17.   
  18.     return 0;  
  19. }  

另外一个AC程序如下(不满意的程序):

[cpp] view plain copy
print?
  1. /* HDU2057 A + B Again */  
  2.   
  3. #include <stdio.h>  
  4.   
  5. int main(void)  
  6. {  
  7.     __int64 a, b, result;  
  8.   
  9.     while(scanf("%I64X %I64X", &a, &b) != EOF) {  
  10.         result = a + b;  
  11.   
  12.         if (result >= 0)  
  13.             printf("%I64X\n", result);  
  14.         else  
  15.             printf("-%I64X\n", -result);  
  16.     }  
  17.   
  18.     return 0;  
  19. }