杭电OJ 1002 A+B

通过的代码:

#include <iostream>
#include <string>
#include <stdlib.h> 
#define max 1002
int f[max];
int g[max];
int x[max];
int y[max];
char str1[max];
char str2[max];
using namespace std;

int main()
{
    int i,j,t,m,n,k,p,r=1;
    cin>>t;
    while(t--)
    {    
        memset(g,0,sizeof(g)); //初始化整数数组 
        memset(f,0,sizeof(f));
        memset(x,0,sizeof(x));
        memset(y,0,sizeof(y));
        cin>>str1;cin>>str2; 
        m=strlen(str1);   
        n=strlen(str2);
        for(i=1;i<=m;i++) f[i]=str1[i-1]-'0'; 
        for(i=1;i<=n;i++) g[i]=str2[i-1]-'0';      
        k=(m>n)?m:n;
        if(k==m)   {for(i=1;i<=k;i++) x[i]=f[i];for(i=1;i<=k;i++) y[i]=g[i];} 
        //此处就是向x[i]数组存入最长的那个整数 
        else  {for(i=1;i<=k;i++) x[i]=g[i];for(i=1;i<=k;i++) y[i]=f[i];}
        p=(m<n)?m:n;   
        int c=0;
        for(i=k,j=p;j>0;j--,i--)
        {
                    
                int s=x[i]+y[j]+c;
                x[i]=s%10;
                c=s/10;
        }
		while(c)
		{	if(x[i]==9)
			{
				x[i]=0;
				c=1;
				i--;
			}
			else 
			{
				x[i]++;
				c=0;
			}
							
		}
        cout<<"Case"<<' '<<r<<':'<<endl;
        for(i=1;i<=m;i++) cout<<f[i];
        cout<<' '<<'+'<<' ';
        for(i=1;i<=n;i++) cout<<g[i];
        cout<<' '<<'='<<' ';
		i=0;
        while(!x[i])i++; for(;i<=k;i++) cout<<x[i];
        r++;
		cout<<endl;
		if(t)
			cout<<endl; //避免结果最后一行多输出一个换行 
    }	
    system("pause");
    return 0;
}

经验:

1、         经常要用到字符串输入,可以strlen()计算出输入的元素个数,再可以f[i]=str1[i]-'0';转化成整数,同时也知道了这个整数有多少位;

2、         最好都要对申明的数组初始化,如:memset(g,0,sizeof(g));

3、         要注意输出格式问题,当多组结果之间要多输出一个换行时,要注意最后一组结果输出时就不要多输出一个换行如加上if(t) cout<<endl;就可避免此问题发生

4、         有事看别人通过的代码,可以检查出自己的格式是否考虑周全

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值