多项式求和

来源:互联网 发布:怎样从淘宝上买东西 编辑:程序博客网 时间:2024/06/07 05:43

Think:
刚刚看到此题的时候 感觉n好大 所以直接暴力 从1 遍历到 n 的话绝对是不可能的, 绝对TLE!!!!
后来发现 题目写了 , 小数点后两位, 所以想到遍历到1000就可以了。
所以 有两种方法 来解答
一:直接一个double的数组; AC
二:链表; AC

Problem Description
多项式描述如下:
1 - 1/2 + 1/3 - 1/4 + 1/5 - 1/6 ……
先请你求出多项式前n项的和。
Input
第一行输入一个数T代表测试数据个数(T<=1000)。接下来T行每行1个数代表n(0<=n< 2^31)。

Output
对于每个输入样例,输出多项式和的结果(结果精确到小数点后两位)。每行输出一个结果。
Example Input

2
1
2

Example Output

1.00
0.50

数组 Accepted 代码

#include<bits/stdc++.h>using namespace std;double a[1050];int main(){  int T, n, i;  for (i = 1;i <= 1000;i ++)   {      a[i] = pow(-1, i - 1) * (double)(1.0 / i);   }   while(cin >> T)    {      while(T --)       {         cin >> n;         double sum = 0;         if (n >= 1000)           {              for (i = 1;i <= 1000;i ++)                 {                    sum+=a[i];                 }           }           else           {             for (i = 1;i <= n;i ++)               {                 sum+=a[i];               }           }           printf("%.2lf\n", sum);       }    }}

链表 Accepted 代码

#include<bits/stdc++.h>using namespace std;struct node{    double data;    struct node *next;};int main(){    int T, n;    while(cin >> T)    {        while(T --)        {            cin >> n;            int i;            double sum  = 0;            struct node *head, *tail, *p;            head = new node;            tail = head;            for (i = 1; i <= 1000; i ++)            {                p = new node;                p -> data = pow(-1, i - 1) * (double)(1.0 / i);                tail -> next = p;                tail = p;            }            p = head -> next;            if (n >= 1000)            {                for (i = 1; i <= 1000; i ++)                {                    sum = sum + p -> data;                    p = p -> next;                }            }            else            {                for (i = 1; i <= n; i ++)                {                    sum = sum + p -> data;                    p = p -> next;                }            }            printf("%.2lf\n", sum);        }    }}
原创粉丝点击