Quantcast
Channel: CSDN博客推荐文章
Viewing all articles
Browse latest Browse all 35570

杭电OJ 1002 A+B

$
0
0

通过的代码:

#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、         有事看别人通过的代码,可以检查出自己的格式是否考虑周全

 

作者:qingdu007 发表于2013-3-1 23:49:26 原文链接
阅读:95 评论:0 查看评论

Viewing all articles
Browse latest Browse all 35570

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>