HDU - 1002 A + B Problem II

HDU - 1002 A + B Problem II


#include"iostream"
#include"stdio.h"
#include"string.h"
using namespace std;
int max(int a,int b);
void result_and_print(int c[1050],int d[1050], int max_ab, int T);
void sums(char a[1050],char b[1050],int T);

int main(int argc, char * argv)
{
    int T;
    char m[1050],n[1050];//存放输入的数字 
    cin>>T;
    int x=1;
    while(T--)
    {
        scanf("%s%s",m,n);
        printf("Case %d:\n",x++);
        printf("%s + %s = ",m,n);
        sums(m,n,T);//将m和n相加并输出结果 
    }
    return 0;
}

int max(int a,int b)
{
    return a>b?a:b;
}

void sums(char a[1050],char b[1050],int T)
{
    int i,j;
    int lenA=strlen(a);
    int lenB=strlen(b);
    int c[1050],d[1050];
    int max_ab=max(lenA,lenB);//知道最长的一个数字,便于对齐 

    for(i=lenA-1;i>=0;i--)
        c[i+max_ab-lenA]=a[i]-'0';
    for(i=lenB-1;i>=0;i--)
        d[i+max_ab-lenB]=b[i]-'0';//将两个数字从字符数组中转到整形数组中 

    for(i=0;i<max_ab-lenA;i++)
        c[i]=0; 
    for(i=0;i<max_ab-lenB;i++)
        d[i]=0;//把对齐之后前面的空补0,便于相加 

    result_and_print(c,d,max_ab,T);//输出结果 
}


void result_and_print(int c[1050],int d[1050], int max_ab,int T)
{
    int i;
    int e[1050];
    for(i=0;i<max_ab;i++)//先相加 
        e[i]=c[i]+d[i];

    for(i=max_ab-1;i>=0;i--)//处理进位 
    {
        if(i>0)//第一位不用处理 
        {
            if(e[i]>=10)
            {
                e[i]-=10;
                e[i-1]+=1;
            }
        }
    }
    for(i=0;i<max_ab;i++)
    {
        if(e[i]!=0)break;
    }
    for(;i<max_ab;i++)//前面的零不用输出 
    {
        printf("%d",e[i]);
    }
    cout<<endl;
    if(T)cout<<endl;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值