杭电OJ--1002

题目链接:
http://acm.hdu.edu.cn/showproblem.php?pid=1002

题目要求:

计算大整数的求和


杭电OJ--1002_第1张图片
image.png

做题思路:

由于这是一道高精度数字计算的题目,unsigned long long double 是不能满足所需要的数字位数的,所以需要别的方法进行计算。

1、首先用两个字符串a[],b[]接受并储存要输入的2个加数;


image.png

2、再用两个整型数组x[],y[]分别 倒序 存储输入的两个加数


杭电OJ--1002_第2张图片
image.png

3、将x[]和y[]的元素对应相加,并存放到z[]中


image.png

4、当元素大于9的都进位加1


image.png

5、循环输出数组

代码:

#include "stdio.h"
#include "string.h"
int main() {
    char a[1000],b[1000];
    int x[1000],y[1000],z[1005];
    int n,p = 0,i,j,k,m,len_a,len_b,len;
    scanf("%d",&n);
    while(n--){
        memset(x,0,sizeof(x)),memset(y,0,sizeof(y)),memset(a,0,sizeof(a)),memset(b,0,sizeof(b));//元素初始化为0
        scanf("%s %s",a,b);
        j = 0,k = 0,m = 0;
        len_a = strlen(a);
        len_b = strlen(b);
        for(i = len_a-1;i>=0;i--) {
            x[j++] = a[i] - '0';      //转化为整型数组
        }
        for(i = len_b-1;i>=0;i--) {
            y[k++] = b[i] - '0';
        }
        len = len_a>len_b?len_a:len_b;//求a和b数组较大的长度
        for(i = 0;i= 10)
                m = 1;
            else
                m = 0;
        }
        //输出
        printf("Case %d:\n",++p);
        printf("%s + %s = ",a,b);
        if(x[len_a-1]+y[len_b-1]+m >= 10)
            printf("1");
        for(i = len-1;i>=0;i--)
            printf("%d",z[i]);
        printf("\n");
        if(n!=0)
            printf("\n");
    }
    return 0;
}

你可能感兴趣的:(杭电OJ--1002)