美文网首页
杭电-1002 A + B Problem II

杭电-1002 A + B Problem II

作者: 这样你就找不到我了 | 来源:发表于2019-12-23 11:11 被阅读0次

注意

最后一行输出仅需一个空行

markdown代码的插入符号为“ ``` ”(~)不是“ ''' ”

#include<stdio.h>
# define Maxsize 2000
int main(){
    int n;
    int sum;
    int cut;
    int a[Maxsize] = {0};
    char c;
    scanf("%d",&n);
    getchar();
    for(int i=0;i<n;i++){
        int aj=0,add=0,sum=0;
        int sums[Maxsize] = {0};
        while ((c=getchar())!='\n'){
            if(c!=' '){
                a[aj] = c-'0';
                aj++;
            }
            else
                cut = aj;
        }
        int len1 = cut;//第一个式子的长度
        int len2 = aj-len1;//第二个式子的长度
        int len1_begin = 0;
        int len1_end = len1-1;
        int len2_begin = len1;
        int len2_end = aj-1;
        
        int long_begin = len2_begin;
        int long_end = len2_end;

        int short_end = len1_end;
        int short_begin = len1_begin;
         
        if(len1 >= len2){
            long_begin = len1_begin;
            long_end = len1_end;
            short_end = len2_end;
            short_begin = len2_begin;
        }
        //核心算法
        for(int j=long_end; j>=long_begin; j--){
            if(short_end >= short_begin){//长度较短的数下标未出界
                sum = a[j]+a[short_end];//将末尾对齐的两数相加
                short_end--;//向前移动,计算高位
                if((sum+add) >= 10){//两数相加,再加进位add的结果大于10,则产生进位,add初始为0
                    sums[j+1] = (sum+add)%10;//设置成j+1是为处理两数相加 位数增加的情况(2+9 = 11)
                    add = (sum + add)/10;
                }
                else{//无进位产生,将相加结果直接存入最终结果数组sums中
                    sums[j+1] = sum+add;
                    add = 0;//此时进位add为0
                }
            }
            else{//如果长度较短的数 下标出界,则运算结果直接等于 长度较长数 注意最开始需要加上上一步运算的进位
                sums[j+1] = a[j] + add;
                add = 0;
            }
        }

        if((sum+add) >= 10)//最后一步运算之后如果有进位,则结果的长度需要增加,以存放该值
            sums[long_begin] = add;
        
        int begin = long_begin;//默认有进位,前一个数不为0,需要输出,注意sums下标从long_begin+1开始存的
        if(sums[begin]==0)
            begin = long_begin+1;


        //输出
        printf("Case %d:\n",i+1);
        for(int j=len1_begin;j<=len1_end;j++)
            printf("%d",a[j]);
        printf(" + ");
        for(int j=len2_begin;j<=len2_end;j++)
            printf("%d",a[j]);
        printf(" = ");
        for(int j=begin;j<=long_end+1;j++)
            printf("%d",sums[j]);
        if(i != n-1)
            printf("\n\n");
        else
            printf("\n");
    }
    getchar();
    getchar();
    return 0;
}

相关文章

网友评论

      本文标题:杭电-1002 A + B Problem II

      本文链接:https://www.haomeiwen.com/subject/rhpanctx.html