算法提高 复数归一化

算法提高 复数归一化  
时间限制:1.0s   内存限制:512.0MB
    
编写函数Normalize,将复数归一化,即若复数为a+bi,归一化结果为a/sqrt(a*a+b*b) + i*b/sqrt(a*a+b*b) 。使用结构体指针类型作为函数参数可能是必要的。其中实部和虚部由键盘输入,输出为归一化结果,如果归一化结果的实部或虚部为小数的要求保留一位小数。

样例输入:(格式说明:3 4 分别为以空格隔开的实数的实部和虚部)
3 4
样例输出:
0.6+0.8i
样例输入: 
2 5
样例输出:
0.4+0.9i
#include <iostream>
#include <cstdio>
#include <vector>
#include <queue>
#include <cmath>
#include <cstring>
#include <algorithm>
#include <cstdlib>
#define for(i,x,n) for(int i=x;i<n;i++)
#define for2(i,x,n) for(int i=x-1;i>=n;i--)
#define ll long long int
#define INF 0x3f3f3f3f
#define MOD 1000000007
#define MAX_N 50005

using namespace std;

struct plural{
    double a,b;
};

int main()
{
    //freopen("data.txt", "r", stdin);
    //freopen("data.out", "w", stdout);
    plural p1;
    double t1,t2;
    scanf("%lf %lf",&t1,&t2);
    p1.a=t1/sqrt(t1*t1+t2*t2);
    p1.b=t2/sqrt(t1*t1+t2*t2);
    if(p1.a!=0&&p1.b>0){
        printf("%.1g+%.1gi",p1.a,p1.b);
    }else if(p1.a!=0&&p1.b<0){
        printf("%.1g%.1gi",p1.a,p1.b);
    }else if(p1.a!=0&&p1.b==0){
        printf("%.1g",p1.a);
    }else if(p1.a==0&&p1.b==0){
        printf("0");
    }else if(p1.a==0&&p1.b!=0){
        printf("%.1gi",p1.b);
    }


    //fclose(stdin);
    //fclose(stdout);
    return 0;
}

 

posted @ 2017-02-11 16:05  多一份不为什么的坚持  阅读(949)  评论(0编辑  收藏  举报