1. 程式人生 > 實用技巧 >E1-A簡單的a+b-複習int、long、long long的取值範圍

E1-A簡單的a+b-複習int、long、long long的取值範圍

題目描述

計算a+b

輸入

第一個數為資料組數n

接下來n行,每行2個整數a,b(a,b在long long範圍內)

輸出

對於每組資料,輸出一行,a+b的值

輸入樣例

1
1 2

輸出樣例

3

資料範圍

0<n<100





主要問題就是兩個大的或者小的long long型數字相加時的資料溢位問題,需要特殊處理。

這裡附上 int、long、long long的取值範圍

unsigned int 0~4294967295
int -2147483648~2147483647
unsigned long 0~4294967295
long -2147483648~2147483647
long long的最大值:9223372036854775807


long long的最小值:-9223372036854775808
unsigned long long的最大值:18446744073709551615

__int64的最大值:9223372036854775807
__int64的最小值:-9223372036854775808
unsigned __int64的最大值:18446744073709551615

比如-9223372036854775808+(-9223372036854775808)結果超出long long可表示的資料範圍。

2020-09-19 21:47:00
//add two numbers of long long
#include<stdio.h>
#include
<math.h> void addition(long long a, long long b){ if(a==0 && b==0) return; else{ int c = (int)(a%10+b%10); if(c<10 && c>-10){ addition(a/10, b/10); printf("%lld", abs(c)); } else if(c>=10 || c<=-10){ addition(a
/10, b/10+c/10); printf("%lld", abs(c%10)); } } } int main(){ long long a, b; int n; scanf("%d", &n); while(n--){ scanf("%lld%lld", &a, &b); if(a>0 && b>0){ addition(a, b); printf("\n"); } else if(a<0 && b<0){ printf("-"); addition(a, b); printf("\n"); } else printf("%lld\n", a+b); } }