首页 > 其他 > 详细

E1-A简单的a+b-复习int、long、long long的取值范围

时间:2020-09-19 23:09:15      阅读:56      评论:0      收藏:0      [点我收藏+]

题目描述

计算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);
    }
}

E1-A简单的a+b-复习int、long、long long的取值范围

原文:https://www.cnblogs.com/mylovegrow/p/13697792.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!