为什么这样可以实现复数相加啊?

写了一个类型转换函数和构造转换函数
但是没有写加法重载
为什么这样还能实现复数相加啊?
最后判断类型也是复数

img

因为有operator double()函数,会自动转换为double类型相加,但最终结果并不是你想要的,会丢失虚部值

因为你重载了double强制类型转换符。所以说从编译的角度没有问题
但是建议你重载下+运算,把实部虚部都相加,返回一个complex对象

  • 帮你找了个相似的问题, 你可以看下: https://ask.csdn.net/questions/260923
  • 这篇博客你也可以参考下:一次异常断电造成磁盘阵列文件系统部分文件损坏而影响时序数据库加载的故障处理
  • 除此之外, 这篇博客: 从时间复杂度和空间复杂度来看斐波那契数列中的 首先我们来看一下什么叫斐波那契数列: 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 斐波那契数列是指这样一个数列:

    1 1 2 3 5 8 13 21 34 55 ~ ~ ~等这样的一组数列。
    它的规律是第三个数等于前两个数之和

    #include<stdio.h>
    #include<stdlib.h>
    int Fibonacci_1(size_t n)//注意返回值可能会很大,但c语言中最大整数为4294967295
    {                        //测试后只能计算前46个斐波那契额数列
    	int  first,second,third;//非递归算法
    	int i;
    	first=0;
    	second=1;
    	if(n<=2)
    	{
    		return 1;
    	}
    	for(i=2; i<=n; i++)
    	{
    		third=first+second;
    		first=second;
    		second=third;
    	}
    	return third;
    }
    int Fibonacci_2(size_t n)//递归算法
    {
    	if(n<=2)
    	{
    		return 1;
    	}
    	else
    		return Fibonacci_1(n-1)+Fibonacci_1(n-2);
    }
    int main()
    {
    	size_t n=40;
    	printf("非递归算法第%d个斐波那契数为>:%d\n",n,Fibonacci_1(n));
    	printf("递归算法第%d个斐波那契数为>:%d\n",n,Fibonacci_2(n));
    	system("pause");
    	return 0;
    }
    

    运行结果如下:

    在这里插入图片描述

    两个代码看起来相差不了多少,但从时间复杂度和空间复杂度上比较,还是相差很远的。

    时间复杂度

    递归算法:
    在这里插入图片描述

    非递归: 通过观察循环次数就可以发现,非递归只需要循环 n次就可以计算出第n个斐波那契数,所以它的时间复杂度时O(n);

    这时当假如n为100时,递归算法需要计算2^100次,二非递归只需要计算100次,这时候递归算法可能需要很长一段时间,而非递归却很快,这就通过时间复杂度体现了两者算法的差别。

    空间复杂度
    在这里插入图片描述

    而非递归方法开辟了三个变量空间,空间复杂度为O(1),而递归的是O(n);但现在随着硬件的发展,空间复杂度已经不那么重要了。
    所以总体来说非递归的算法效率更高。

  • 您还可以看一下 七月在线老师的 网易云音乐推荐系统特训课程中的 基于网易云音乐数据的推荐预测小节, 巩固相关知识点