实数加法

这里写图片描述

  • 这是一道高精度下的实数加法,我们和高精度整数加法的思想一样,只是将数分为两个部分,整数部分和小数部分,在进行相加,最后输出时注意小数部分末尾的0,要处理掉,下面是代码
#include<cmath>
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<cstdlib>
#include<algorithm>
using namespace std;
const int N=110;
int flag=0;

void ni(char a[])
{
    int len=strlen(a);
    char b[N];
    for(int i=0;i<len;i++)
        b[i]=a[i];
    for(int i=0;i<len;i++)
        a[i]=b[len-1-i];
}

void add(char a[],char b[])
{
     ni(a);
     ni(b);
    int lena=strlen(a),lenb=strlen(b),i,j;
    for(i=0;i<lena&&i<lenb;i++){
        int t=a[i]-'0'+b[i]-'0'+flag;
        a[i]=t%10+'0';
        flag=t/10;
    }
    int max0=i;
    for(j=i;j<lena;++j){
        int t=a[j]-'0'+flag;
        a[j]=t%10+'0';
        flag=t/10;
        max0=j+1;
    }
    for(j=i;j<lenb;++j){
        int t=b[j]-'0'+flag;
        a[j]=t%10+'0';
        flag=t/10;
        max0=j+1;
    }
    if(flag==1)
    {
        a[max0]='1';
        a[max0+1]='\0';
    }
    else
        a[max0]='\0';
}

void qu(char a[])
{
    int len=strlen(a);
    int i=0;
    while(a[i]=='0'){
        i++;
    }
    for(int j=0;j<len-i;j++){
        a[j]=a[j+i];
    }
    a[len-i]='\0';
}

int main()
{
    char a[N],b[N];
    scanf("%s %s",a,b);
    int lena=strlen(a),lenb=strlen(b);
    char a1[N],a2[N],b1[N],b2[N];
    int i,j;
    for(i=0;i<lena;i++){
         if(a[i]=='.')
            break;
         a1[i]=a[i];
    }
    a1[i]='\0';
    for(j=i+1;j<lena;j++){
        a2[j-i-1]=a[j];
    }
    a2[j-i-1]='\0';
    for(i=0;i<lenb;i++)
    {
        if(b[i]=='.')
            break;
        b1[i]=b[i];
    }
    b1[i]='\0';
    for(j=i+1;j<lenb;j++){
        b2[j-i-1]=b[j];
    }
    b2[j-i-1]='\0';
    int lena2=strlen(a2),
        lenb2=strlen(b2),
        mlen=lena2;
    if(lena2<lenb2){
        for(int i=lena2;i<lenb2;i++){
            a2[i]='0';
        }
        a2[lenb2]='\0';
        mlen=lenb2;
    }
    else if(lena2>lenb2){
        for(int i=lenb2;i<lena2;i++){
            b2[i]='0';
        }
        b2[lena2]='\0';
    }
    add(a2,b2);
    a2[mlen]='\0';
    qu(a2);
    ni(a2);
    add(a1,b1);
    ni(a1);
    printf("%s.%s\n",a1,a2);
    return 0;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我来为您解答。下面是具体的实现过程: ```c++ #include <iostream> using namespace std; //定义复数类 class Complex{ public: Complex(double r=0, double i=0): real(r), imag(i){} //构造函数 Complex operator+(const Complex& c); //重载加法运算符 Complex operator+(const double& r); //重载实数加法运算符 friend Complex operator-(const Complex& c1, const Complex& c2); //友元函数重载减法运算符 friend Complex operator-(const Complex& c, const double& r); //友元函数重载实数减法运算符 void display(); //输出函数 private: double real; //实部 double imag; //虚部 }; //成员函数重载加法运算符 Complex Complex::operator+(const Complex& c){ return Complex(this->real+c.real, this->imag+c.imag); } //成员函数重载实数加法运算符 Complex Complex::operator+(const double& r){ return Complex(this->real+r, this->imag); } //友元函数重载减法运算符 Complex operator-(const Complex& c1, const Complex& c2){ return Complex(c1.real-c2.real, c1.imag-c2.imag); } //友元函数重载实数减法运算符 Complex operator-(const Complex& c, const double& r){ return Complex(c.real-r, c.imag); } //输出函数 void Complex::display(){ cout << this->real << "+" << this->imag << "i" << endl; } int main(){ Complex c1(1, 2); Complex c2(3, 4); Complex c3 = c1 + c2; c3.display(); //输出:4+6i Complex c4 = c1 + 5; c4.display(); //输出:6+2i Complex c5 = c2 - c1; c5.display(); //输出:2+2i Complex c6 = c2 - 2; c6.display(); //输出:1+4i return 0; } ``` 在上面的代码中,我们首先定义了复数类 Complex,其中包含了实部和虚部,以及构造函数、成员函数重载加法运算符、成员函数重载实数加法运算符、友元函数重载减法运算符、友元函数重载实数减法运算符和输出函数。 成员函数重载加法运算符和成员函数重载实数加法运算符都是成员函数,重载的是加法运算符,前者参数为一个复数,后者参数为一个实数,都是返回一个 Complex 类型的值,表示两个复数(或一个复数和一个实数)相加的结果。 友元函数重载减法运算符和友元函数重载实数减法运算符都是友元函数,重载的是减法运算符,前者参数为两个复数,后者参数为一个复数和一个实数,都是返回一个 Complex 类型的值,表示两个复数(或一个复数和一个实数)相减的结果。 最后在主函数中演示了使用这些运算符的例子,输出了相应的结果。 希望我的回答对您有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值