题目1026:又一版 A+B

来源:互联网 发布:形容程序员的搞笑图片 编辑:程序博客网 时间:2024/05/15 23:48
题目描述:

输入两个不超过整型定义的非负10进制整数A和B(<=231-1),输出A+B的m (1 < m <10)进制数。

输入:
输入格式:测试输入包含若干测试用例。每个测试用例占一行,给出m和A,B的值。
当m为0时输入结束。
输出:
输出格式:每个测试用例的输出占一行,输出A+B的m进制数。
样例输入:
8 1300 482 1 70
样例输出:
25041000

代码:

#include <stdio.h>int main() {    int m;    long long a,b;    //while(scanf("%d %lld %lld",&m,&a,&b)!=EOF) {    while(scanf("%d",&m)!=EOF) {        if(m == 0) break;        scanf("%lld %lld",&a,&b);        long long sum = a + b;        if(sum == 0)            printf("0\n");        else {        int buf[50];        int i=0;        while(sum != 0) {            buf[i++] = sum % m;            sum /= m;        }        int j;        for(j=i-1;j>=0;j--)            printf("%d",buf[j]);        printf("\n");        }    }    return 0;}

使用了数据类型long long。这是一种用64位二进制来表示一个整数的数据类型,取值范围为

-2^63 ~ 2^63 - 1。 本题中输入了数虽然在int范围(<=2^31 - 1)内,但是他们的和就可能超过

int范围了。  对应的输入,输出用 %lld.


在16位环境下,int/unsigned int 占16位,long/unsigned long占32位
  在32位环境下,int占32位,unsigned int占16位,long/unsigned long占32位
何时需要使用:
  long 和 int 范围是[-2^31,2^31),即-2147483648~2147483647,而unsigned范围是[0,2^32),即0~4294967295,所以常规的32位整数只能够处理40亿左右,当遇到比40亿大的多的数就要用到64位。

long long 占64位


注意a = 0, b = 0这组数据。

原创粉丝点击