2020.11.04
阿新 • • 發佈:2020-11-05
修改前
#include<stdio.h> int main() {long long a,b; unsigned long long c; scanf("%lld%lld",&a,&b); c=(unsigned long long)(a+b); if(a>0&&b>0) { c=(unsigned long long)(a+b); if(c>9223372036854775807) {printf("PO!");} else{printf("%lld",c);} } if(a<0&&b<0&&(a!=-9223372036854775808&&b!=-9223372036854775808)) {a=-a; b=-b; c=(unsigned long long)a+(unsigned long long)b; if(c>9223372036854775808){printf("NO!");} else{printf("%lld",c);} } if((a>0&&b<0)||(a<0&&b>0)) { c=a+b; printf("%lld",c); } if((a==-9223372036854775808||b==-9223372036854775808)&&(a<0&&b<0)&&!(a==-9223372036854775808&&b==-9223372036854775808)) {a=(unsigned long long)(-a);b=(unsigned long long)(-b); c=a+b; if(c>9223372036854775807) {printf("NO!");} else{printf("%lld",c);}} if(a==-9223372036854775808&&b==-9223372036854775808){printf("NO!");} return 0; }
修改後
1 #include <stdio.h> 2 #define INF 9223372036854775807ull // long long 的最大值(型別為 unsigned long long) 3 #define NINF -9223372036854775808 // long long 的最小值 4 #define ULL unsigned long long // 合理運用巨集定義可以簡化程式 5 6 int main() 7 { 8 long long a, b; 9 10 scanf("%lld%lld", &a, &b);11 12 if (a == NINF && b == NINF) 13 printf("NO!\n"); // 特判一下特殊情況 14 else if (a > 0 && b > 0 && (ULL)a + b > INF) 15 printf("PO!\n"); // 正溢位 16 else if (a < 0 && b < 0 && (ULL)(-a) + (-b) > INF + 1) 17 printf("NO!\n"); // 負溢位 18 else 19 printf("%lld\n", a + b); 20 21 return 0; 22 }