2017年4月18日今日头条笔试原题C题

来源:互联网 发布:python labeled lda 编辑:程序博客网 时间:2024/05/29 02:32

题目:




我的代码(测试用例80%通过):

#include <iostream>#include<string.h>using namespace std;char ans[5][100], char0 = '0';const char cs[17] = "1234567890+-*/.=";const char s[5][100] = {"*    ***  ***  * *  ***  ***  ***  ***  ***  ***                                 ","*      *    *  * *  *    *      *  * *  * *  * *   *        * *    *       ****  ","*    ***  ***  ***  ***  ***    *  ***  ***  * *  ***  ***   *    *              ","*    *      *    *    *  * *    *  * *    *  * *   *        * *  *    **   ****  ","*    ***  ***    *  ***  ***    *  ***  ***  ***                      **         "};void add(char c){int k = -1, num = 5;for (int i = 0; i < 16; i++)if (cs[i] == c)k = i;if (k == -1)return;if (k == 15)num = 6;if (k == 0)num = 3;if (k == 14)num = 4;for (int i = 0; i < 5; i++)strncat(ans[i], s[i] + k * 5, num);}void add(int n){if (n >= 10){add(n / 10);add(n % 10);return;}add(char(char0 + n));}void add(double x){int n = int(x);double eps = 0.0000001, r = x - n;if (n - x < eps && x - n < eps)r = 0;add(n);if (r == 0)return;add('.');n = int(r * 100);if (n % 10 == 0)n /= 10;add(n);}int main(){for (int i = 0; i < 5; i++)ans[i][0] = '\0';int a, b, r1;double r2 = -1;char ch = ' ';scanf("%d %c %d", &a, &ch, &b);add(a);add(ch);add(b);add('=');if (ch == '+')r1 = a + b;if (ch == '-')r1 = a - b;if (ch == '*')r1 = a*b;if (ch == '/')r2 = a*1.0 / b;if (r2 == -1)add(r1);else add(r2);for (int i = 0; i < 5; i++)cout << ans[i] << endl;return 0;}

这个代码我觉得写得还是不错的,就是不知道为什么只通过了80%,应该是void add(double x)函数里面有问题,小数部分处理的还不到位。

首先,把所有字符存到cs里面,把对应的形式化符号全部存到s里面,编程起来方便很多。

其次,对add重载了3次,而且互相调用,也使得编程简单了很多。

0 0
原创粉丝点击