C2第三次作业解题报告

看过题解后如果觉得还算有用,请帮忙加点我所在团队博客访问量

http://www.cnblogs.com/newbe/

http://www.cnblogs.com/newbe/p/4069834.html

http://www.cnblogs.com/newbe/p/4072005.html

求赞求祝福啊!!!

http://www.cnblogs.com/newbe/p/4058097.html

软工老师太狠心,还请可怜一下同课不同命的我们吧~点一下文章末尾的推荐什么的呗,有个回复什么的就更好了!

1、后缀式转中缀式

先给个样例

1 2 3 4 5 6 7 - * / * 8 9 10 11 / * + - - - 

输出:
1-(2-(3*4/(5*(6-7))-(8+9*10/11))) 

思路就是地归求解即可,没搜到一个运算符就向前搜索确定该运算符对应的处理字符串起止坐标,方法就是从数组后向前读,当读入的空格数与符号数之差(即读入的数的个数)与符号数相同时停止,那么就找到了类似A B +的串(A,B指的是类似c d -或者数字之类的东西)

注意条件只要不影响计算结果的括号都要省去,+-*/要分类讨论

例如A B (运算符)

如果+,直接搞(先输出A再输出运算符再输出B)前后不用加括号

如果-,A直接搞,B的末尾是+-号的话要加括号

如果*,A,B只有为+-号时候才加括号

如果/,A只有为+-号时候才加括号,B只有是数字的时候才不用加括号


2、N的阶乘

简单的大数运算

开一个数组维护大数,把1~n都乘进去即可,使用大数乘小数的算法

作业还没封,贴一下部分代码,计算数组p乘x的函数的一部分

    c = x*p[0];
    p[0] = c%10;
    c = c/10;
    while(c || i < m){
        c += x*p[i];
        p[i] = c%10;
        c = c/10;
        ++i;
    }

3、凸多边形面积

凸多边形面积,很自然想到转换成三角形面积求和,用海伦公式即可

p = (a+b+c)/2.0;

S三角 = sqrt(p*(p-a)*(p-b)*(p-c));

4、浮点计算

这题注意-m ≤ i ≤ n,求和运算会出现整数部分和小数部分都很长的情况

那么吧-m~-1和1~n的求和分离开来考虑

前者用一个long double单独存储计算,后者用long long 单独计算,

最后把double部分的整数部分给long long 然后分别输出即可

5、数据的序号

没什么好说的,开个二维数组或者结构数组,每个单位存两个属性,值和位置,然后排序,开一个数组记录1~n位置上数的大小次序,特殊处理一下重复的数即可


原文地址:https://www.cnblogs.com/zibaohun/p/4049440.html