<整数减法>

今天又看了一下以前做的小题目,感觉这个比较不错,虽然不是很难,但要注意的东西不少。

总时间限制: 1000ms 内存限制: 65536kB
描述
两个十进制非负整数M和N,计算二者的差,既M-N。
M、N最多可以是长度为200位的整数。
输入
多组数据,每组数据先是一行表示M,然后一行表示N。M和N开头均无冗余的0。
输出
每行一个数,表示M-N,开头不能有冗余的0,既不能输出05这样的数,而应该直接输出5。
样例输入
9999
4567
0
1
样例输出
5432
-1

  源代码:

#include<iostream>
#include<cstring>
using namespace std;
int main()
{
    int i,k,m,n,x,p,m1,n1,v,d;
    char a[200], b[200];
    while( cin>>a>>b )
    {
        int c[200]={0};
        p=0;
        m=strlen(a);
        n=strlen(b);
        m1=m-1;
        n1=n-1;
        if(m > n)                                //a>b
        {
            for(i=0;i<n;i++)
            {
                if(a[m1]+p >= b[n1])
                 {
                     a[m1]=a[m1]+p-b[n1];
                     p=0;                       
                     m1--;n1--;
                 }
                 else
                 {
                    a[m1]=a[m1]+p+10-b[n1];
                    p=-1;
                    m1--;n1--;
                 }
            }
            for(i=m1;i>=0;)
            {
                if(a[i]+p-48<0)
                    {
                        a[i]=a[i]+p+10;
                        p=-1;
                        i--;
                    }
                else break;
            }
            a[i]=a[i]+p;
            for(i=0;i<m-n;i++)
                if(a[i]-48 != 0)
                c[i]=(int)a[i]-48;
            for(i=m-n;i<m;i++)
              c[i]=(int)a[i];
            for(i=0;i<m;i++)
            {
                if(c[i] != 0) break;
            }
            for(x=i;x<m;x++)
                cout<<c[x];
        }
        if(m==n)                                //a,b的长度一样
        {
           for(v=0;v<m;v++)
           {
               if(a[v]>b[v]) {d=1;break;}       //a>b;
               if(a[v]==b[v]){d=2;}             
               if(a[v]<b[v]) {d=0;break;}
           }
           if(d==2) cout<<"0";                 //a=b;
           if(d==1)                            //a>b;
           {
                for(i=0;i<n;i++)
            {
                if(a[m1]+p >= b[n1])
                 {
                     a[m1]=a[m1]+p-b[n1];
                     p=0;
                     m1--;n1--;
                 }
                else
                 {
                    a[m1]=a[m1]+p+10-b[n1];
                    p=-1;
                    m1--;n1--;
                 }
            }
            for(i=0;i<m-n;i++)
                if(a[i]-48 != 0)
              c[i]=(int)a[i]-48;
            for(i=m-n;i<m;i++)
              c[i]=(int)a[i];
             for(i=0;i<m;i++)
            {
                if(c[i] != 0) break;
            }
            for(x=i;x<m;x++)
                cout<<c[x];
           }
        if(d==0)                         //a<b;
           {
               for(i=0;i<n;i++)
            {
                if(b[n1]+p >= a[m1])
                 {
                     b[n1]=b[n1]+p-a[m1];
                     p=0;
                     m1--;n1--;
                 }
                 else
                 {
                    b[n1]=b[n1]+p+10-a[m1];
                    p=-1;
                    m1--;n1--;
                 }
            }
            cout<<"-";
            for(i=0;i<m-n;i++)
                if(b[i]-48 != 0)
               c[i]=(int)b[i]-48;
            for(i=m-n;i<m;i++)
            c[i]= (int)b[i];
             for(i=0;i<m;i++)
            {
                if(c[i] != 0) break;
            }
            for(x=i;x<m;x++)
                cout<<c[x];
           }
        }
        if(n>m)                                       //a<b;
        {
          for(i=0;i<m;i++)
            {
                if(b[n1]+p >= a[m1])
                 {
                     b[n1]=b[n1]+p-a[m1];
                     p=0;
                     m1--;n1--;
                 }
                 else
                 {
                    b[n1]=b[n1]+p+10-a[m1];
                    p=-1;
                    m1--;n1--;
                 }
            }
            for(i=n1;i>=0;)                  
            {
                if(b[i]+p-48<0)
                    {
                        b[i]=b[i]+p+10;
                        p=-1;
                        i--;
                    }
                else break;
            }
            b[i]=b[i]+p;
            cout<<"-";
            for(i=0;i<n-m;i++)
                if(b[i]-48 != 0)
                c[i]=(int)b[i]-48;
            for(i=n-m;i<n;i++)
                c[i]=(int)b[i];
             for(i=0;i<n;i++)
            {
                if(c[i] != 0) break;
            }
            for(x=i;x<n;x++)
                cout<<c[x];
        }
        cout<<endl;
    }
    return 0;
}

看起来代码很长,其实都差不多,只是分的情况比较多而已。

posted on 2013-08-23 20:59  天梦Interact  阅读(252)  评论(0编辑  收藏  举报