2020.11.04
修改前
#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 }
每天进步一点点

浙公网安备 33010602011771号