题目
从键盘读入n个复数(实部和虚部都为整数)用链表存储,遍历链表求出n个复数的和并输出。
输入
无
输出
无
样例输入
3
3 4
5 2
1 3
样例输出
9+9i
解题思路
如果按照题意写链表,那么直接将输入的实部虚部数值存储在链表的每一个节点当中,最后遍历链表分别将各自的实部、虚部相加,输出即可。
不使用链表的话,直接求和后输出,更简便。
该题与题目1585类似(题目1585:链表数据求和操作)
代码
#include<stdio.h>
struct node{
int head;//首地址
int sb;//实部
int xb;//虚部
int tail;//尾地址
};
int main()
{
int num;
scanf("%d",&num);
struct node N[num];//结点数组,通过地址相接,构成链表
int i,s,x,t1,t2;
s = 0;
x = 0;
for (i=0;i<num;i++)//读入,存储到链表当中
{
scanf("%d %d\n",&t1,&t2);
N[i].head = i;
N[i].tail = i+1;
N[i].sb = t1;
N[i].xb = t2;
}
i = 0;//首地址开始遍历
while (i<num)//遍历链表当中的每一个元素
{
s+=N[i].sb;
x+=N[i].xb;
i++;
}
printf("%d",s);
if (x>0)
printf("+%di",x);
else if (x<0)
printf("%di",x);
return 0;
}
如果不按照题意,即不写链表,也可以AC,代码如下:
#include<stdio.h>
int main()
{
int num;
scanf("%d",&num);
int i,s,x,t1,t2;
s = 0;
x = 0;
for (i=0;i<num;i++)
{
scanf("%d %d\n",&t1,&t2);
s+=t1;
x+=t2;
}
printf("%d",s);
if (x>0)
printf("+%di",x);
else if (x<0)
printf("%di",x);
return 0;
}