`
闫老三
  • 浏览: 102734 次
社区版块
存档分类
最新评论

C++大数运算与运算符重载

 
阅读更多

应博问里面一个童鞋的要求,写了下面一个程序,主要是大数运算和运算符的重载,时间限制,只做了加法。大神你可以直接略过,见笑见笑,呵呵(PS:写博客的时候怎么插入表情?)。

废话不多说,程序如下。

#include <iostream>  
#include <cstring>  
using namespace std;  
class BigNum  
{  
private:  
    char *num;  
    int length;  
public :  
    BigNum();  
    BigNum(const char *);  
    BigNum(const BigNum & bigNum);  
    int print();  
    BigNum operator + (BigNum);  
    BigNum & operator =(BigNum);  
};  
BigNum & BigNum::operator = (BigNum bigNum)  
{  
    this->length=bigNum.length;  
    delete this->num;  
    this->num=new char[this->length+1];  
    for(int i=0;i<this->length;i++)  
    {  
        this->num[i]=bigNum.num[i];  
    }  
    this->num[length]='\0';  
    return *this;  
}  
BigNum::BigNum()  
{  
    this->length=0;  
}  
BigNum::BigNum(const char *bigNum)  
{  
    this->length=strlen(bigNum);  
    num=new char[length+1];  
    for(int i=0;i<length;i++)  
    {  
        this->num[i]=bigNum[length-1-i];  
    }  
}  
BigNum::BigNum(const BigNum & bigNum)  
{  
    this->length=bigNum.length;  
    this->num=new char[this->length+1];  
    for(int i=0;i<this->length;i++)  
    {  
        this->num[i]=bigNum.num[i];  
    }  
    this->num[length]='\0';  
}  
int BigNum::print()  
{  
    for(int i=length-1;i>=0;i--)  
        cout<<this->num[i];  
    return this->length;  
}  
BigNum BigNum::operator + (BigNum bigNum)  
{  
    char * a;  
    int length=max(this->length,bigNum.length);  
    a=new char[length+2];  
    int car=0;  
    int i;  
    for(i=0;i<length||car!=0;i++)  
    {  
        car=this->num[i]-'0'+bigNum.num[i]-'0'+car;  
        a[i]=car%10+'0';  
        car/=10;  
    }  
    a[i]='\0';  
    delete this->num;  
    this->num=a;  
    return *this;  
     
}  
int main()  
{  
    BigNum bigNum_1("123456");  
    BigNum bigNum_2(bigNum_1);  
    bigNum_1.print();  
    cout<<endl;  
    bigNum_2.print();  
    cout<<endl;  
    bigNum_1=bigNum_2+bigNum_1;  
    bigNum_1.print();  
    return 0;  
}

 转载请注明原文地址:http://uwind.iteye.com/blog/1926471

1
6
分享到:
评论

相关推荐

    c++大数运算,重载运算符

    运算符已经重载,界面友好,在hdu上可以跑出0ms,也适合做acm模板

    c++大数运算的基本思路

    为了支持大数运算,需要重载常见的数学运算符,如赋值(=)、加(+), 减(-), 乘(*), 除(/), 递增(++)和递减(--), 以及取余(%). 特别地,除法(/)运算返回商,余数丢失;而除以等于(/=)返回余数,商存储在左操作数中。...

    C++大数运算源代码

    本篇将围绕标题"**C++大数运算源代码**"和描述中的内容,深入探讨如何在C++中实现大数运算。 首先,我们关注到压缩包内的两个文件:`杨闽-C语言大数预算程序.cpp`和`HugeInt.h`。`HugeInt.h`很可能是一个头文件,...

    大数运算c++

    设计一个“大数类”(LargeNumber),使它支持对任意大整数的输入、输出...2. 重载基本运算符,使其能够实现“大数”与“大数”,“大数”与双精度数之间的基本运算。 3. 给大数引进“正负号”,使其支持正负数的运算。

    C++ 大整数运算库(附源码)

    用于运算、输出大整数的C++库,使用简便,即下即用,已重载各类运算符,支持ostream(cout)输出和字符串输出、字符串构造、最大公约数和最小公倍数计算。 具体用法、函数说明可以在文件夹中的README.txt中找到

    大数运算模板(C++)

    大数运算模板(C++) 大数运算模板是一个C++语言实现的大数运算库,用于处理大数的四则运算、平方根、求末尾0个数、求长度等操作。该模板只能处理正数的大数,包括int型的组合排列。下面是该模板的一些使用方法和...

    实验五、运算符重载 复数+-*/ 大数+-*/

    运算符重载是C++中的一种重要特性,它允许我们为已有的运算符赋予新的含义,使其能适用于自定义的数据类型,如这里的复数类和大数类。 首先,复数类`Complex`被设计用来表示数学中的复数。它包含两个私有成员变量`...

    大数运算的实现bigint

    总之,大数运算的实现是一项涉及数据结构设计、运算符重载和高效算法的重要任务,尤其是在密码学应用中。C++提供的面向对象特性使其成为实现此类功能的理想选择。通过自行设计位长度和重载基本运算符,我们可以创建...

    大数运算的类

    标题中的"大数运算的类"指的是C++中用于处理大数的自定义数据结构或第三方库。这种类通常会实现整数的动态存储和各种算术操作,如加法、减法、乘法和除法。描述中提到的"C++中大数运算的类"更进一步地明确了我们讨论...

    大数类c++大数类

    在C++中,可以通过重载运算符和实现自定义的整数类来实现大数类。 在这个示例代码中,我们定义了一个名为`Integer`的类,重载了所有基本的运算符,如`+`、`-`、`*`、`/`、`%`等,以及比较运算符`&gt;`、`、`==`、`!=`...

    c++实现大数计算问题

    4. **运算符重载**:为了使大数类的使用更直观,我们通常会重载各种运算符,如`+`、`-`、`*`、`/`等。这涉及到在大数类内部实现这些运算的逻辑。 5. **大数比较**:在大数计算中,还需要实现比较操作(如`&gt;`、`、`=...

    基于VC++的大数运算

    总结起来,“基于VC++的大数运算”涉及的主要知识点包括:大数表示(字符串或自定义数据结构)、大数的加、减、乘、除算法实现、类的设计与操作符重载、内存管理和测试策略。这些知识对于深入理解和应用C++编程,...

    C++大数模板(推荐)

    总结来说,C++大数模板是一种高效且灵活的工具,通过运算符重载和自定义数据结构,实现了大整数的高效计算。它不仅简化了大数操作的代码,还提高了代码的可读性和可维护性。理解和掌握大数模板的实现原理及使用方法...

    C++高精度大数模板

    虽然简略,但这种模板足够处理大部分日常的大数运算需求。 接下来是“高精度(加强版)”。加强版通常会包含更多高级功能和优化,如更高效的算法、错误检查、内存管理等。例如,它可能使用了更复杂的多精度乘法算法...

    MFC实现大数相加 C++

    大数运算的效率可以通过优化算法,如使用Karatsuba算法或Toom-Cook算法来提高。这些算法可以减少大数乘法或加法的计算复杂度,从而在处理非常大的数字时提高性能。 总的来说,实现MFC中的大数相加需要设计一个...

    c++ 第9天 课堂代码 +练习

    在C++的学习过程中,第9天的课程涵盖了多个核心概念,包括输入/输出(I/O)、类的成员函数、运算符重载、数组操作以及复杂数据类型的实现。这些知识点是C++编程的基础,对于初学者来说至关重要。让我们逐一探讨这些...

    C++编写的大数类bign

    用C++写的大数类,重载了+ - * / += -= *= /= =等运算符

    C++程序课程设计—带符号大整数计算器

    该课程设计展示了如何在C++中设计和实现一个带符号大整数的计算器,涉及类的设计、运算符重载以及基本的输入输出处理。通过这个项目,学生不仅可以加深对C++语言的理解,还能掌握处理大整数的技巧,这对于未来的软件...

    大树各种运算

    8. **输入输出**:为了方便用户与大数进行交互,需要实现大数的输入和输出功能,这通常通过重载`和`&gt;&gt;`运算符来实现。 总的来说,“大树各种运算”项目是C++中实现大数运算的一个实例,它涵盖了大数的存储、基本...

    C++高精度代码及代码解释

    总的来说,这个`C++高精度代码`示例旨在提供一个易于使用且功能完善的高精度计算框架,通过重载操作符使得用户可以像使用普通整数一样进行大数运算。学习这个代码可以帮助开发者深入理解C++的类设计、操作符重载以及...

Global site tag (gtag.js) - Google Analytics