C++项目 - 大数四则运算

本文介绍了一个使用C++和String类在Windows Visual Studio 2013环境下实现的大数运算项目,包括大数的读写、加、减、乘、除、取模和比较操作。通过将大数转换为字符串并分解为单个字符处理,解决了超过long long int存储范围的计算问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

大数运算


开发环境:Windows Visual Studio 2013
项目概述:利用String类实现对大数的读写,以及实现大数之间的加、减、乘、除、取模和比较运算。
使用技术:C++、String类。
项目思想:使用C++类将超过C++中能够存储最大整型变量(long long int)所能存储的范围的数转换成字符串进行存储,将存储大数的字符串拆开进行分析,逐位进行运算存储,实现大数间的加、减、乘、除、取模和比较运算。将大数运算分解成单个字符的运算。

Bignum.h

#define _CRT_SECURE_NO_WARNINGS 1
#pragma once
#include <iostream>
#include <assert.h>
#include <string>
using namespace std;


#define MAX_INT64 9223372036854775807  
#define MIN_INT64 -9223372036854775808 


typedef long long INT64;

class BigData
{
public:
    BigData(INT64 data); 
    BigData(const char *_pdata);  
    BigData operator+(BigData& bigData);  
    BigData operator-(const BigData& bigData);  
    BigData operator*(const BigData& bigData);  
    BigData operator/(const BigData& bigData); 
    BigData operator%(const BigData& bigData);    
    friend std::ostream& operator<<(std::ostream& _cout, const BigData& bigData);  
    //friend std::istream& operator>>(std::istream& _cin, BigData bigData);  
    bool IsINT64Overflow()const; 
private:
    void INT64ToString();  
    std::string Add(std::string left, std::string right);  
    std::string Sub(std::string left, std::string right);  
    std::string Mul(std::string left, std::string right);  
    std::string Div(std::string left, std::string right);  
    bool IsLeftStrBig(char *pLeft, size_t LSize, char *pRight, size_t RSize);  
    char SubLoop(char *&pLeft, int& LSize, char *pRight, size_t RSize);
private:
    INT64 _value;
    std::string _strData;
};

Bignum.cpp

#define _CRT_SECURE_NO_WARNINGS 1
#include "Bignum.h"

BigData::BigData(INT64 data)  
: _value(data)  
, _strData("")  
{
    INT64ToString();  
}
BigData::BigData(const char *_pdata)  
{  
    assert(_pdata);  
    char symbol = _pdata[0];  
    char* pdata = (char*)_pdata;  
    if (symbol == '+' || symbol == '-')  
    {  
        pdata++;  
    }  
    else if (*pdata >= '0'&& *pdata <= '9')  
    {  
        symbol = '+';  
    }  
    else  
    {  
        _value
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值