| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 556 人关注过本帖
标题:大整数加法和乘法(stl)
只看楼主 加入收藏
习惯被动
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:139
专家分:144
注 册:2012-3-5
结帖率:84.62%
收藏
已结贴  问题点数:10 回复次数:5 
大整数加法和乘法(stl)
程序代码:
#include <iostream>
#include <string>
#include <deque>
#include <functional>
#include <algorithm>


using namespace std;

class MyBigNum
{
    deque<int>v;
public:
    MyBigNum(){};
    MyBigNum(string strNum)
    {
        copy(strNum.begin(),strNum.end(),back_inserter(v));
        transform(v.begin(),v.end(),v.begin(),bind2nd(minus<int>(),'0'));
    }

    deque<int>::iterator begin()
    {
        return v.begin();
    }
    deque<int>::iterator end()
    {
        return v.end();
    }
    int size()
    {
        return v.size();
    }
    back_insert_iterator<deque<int>>Back_Inserter()//这段有错误,不知道怎么改
    {
        return back_inserter(v);
    }
    void push_front(int n)
    {
        v.push_front(n);
    }
    void push_back(int n)
    {
        v.push_back(n);
    }
    void adjust()
    {
        int nSize=v.size();

        for(int i=nSize-1;i>=1;i--)
        {
            int value=v[i];
            if(value<10)
                continue;
            v[i]=value%10;
            v[i-1]=value/10;
        }
       
        int value=v[0];
        if(value>=10)
        {
            v[0]=value%10;
            value=value/10;
            while(value>0)
            {
                v.push_front(value%10);
                value/=10;
            }
        }
        nSize=v.size();
    }

    MyBigNum Add(MyBigNum &m)
    {
        MyBigNum result;
        int n=size()-m.size();
        if(n>=0)
        {
            transform(begin()+n,end(),m.begin(),result.Back_Inserter(),plus<int>());
            for(int i=n-1;i>=0;i--)
            {
                result.push_front(*(begin()+i));
            }
        }
        else
        {
            transform(begin(),end(),m.begin()-n,result.Back_Inserter(),plus<int>());
            for(int i=-n-1;i>=0;i--)
            {
                result.push_font(*(m.begin()+i));
            }
        }
        result.adjust();
        return result;
    }

    MyBigNum Multiply(MyBigNum& m)
    {
        MyBigNum mid;
        for(int i=0;i<m.size();i++)
        {
            mid=*this;
            for(int j=0;j<i;j++)
            {
                mid.push_back(0);
            }
            transform(mid.begin(),mid.end(),mid.begin(),bind2nd(multiplies<int>(),
                *(m.begin()+i)));
            result=mid.Add(result);
        }
        return result;
    }
    };
    void main()
    {
        MyBigNum m1("1234567890");
        MyBigNum m2("99999999998");
        MyBigNum result=m1.Add(m2);
        cout<<"1234567890+99999999998=";
        copy(result.begin(),result.end(),ostream_iterator<int>(cout));
        cout<<endl;

        MyBigNum m3("99");
        MyBigNum m4("99999");
        MyBigNum m5=m3.Multiply(m4);
        cout<<"99*99999=";
        copy(m5.begin(),m5.end(),ostream_iterator<int>(cout));
        cout<<endl;
    }
错误已经指出,麻烦各位大侠指点一下
2012-10-22 12:50
寒风中的细雨
Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17
等 级:贵宾
威 望:66
帖 子:1710
专家分:8645
注 册:2009-9-15
收藏
得分:10 
<deque<int>>

<deque<int> >
2012-10-22 13:07
习惯被动
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:139
专家分:144
注 册:2012-3-5
收藏
得分:0 
请问版主这有什么区别吗?麻烦解释一下。谢谢!
2012-10-22 16:41
寒风中的细雨
Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17
等 级:贵宾
威 望:66
帖 子:1710
专家分:8645
注 册:2009-9-15
收藏
得分:0 
>>
会被解析成运算符
2012-10-22 18:10
习惯被动
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:139
专家分:144
注 册:2012-3-5
收藏
得分:0 
哦哦,谢谢版主啦!
2012-10-22 19:21
烟雾中的迷茫
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
帖 子:621
专家分:1069
注 册:2011-2-9
收藏
得分:0 
学习
2012-10-22 20:12
快速回复:大整数加法和乘法(stl)
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017890 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved