优化了一波计算器

Posted miaoz

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了优化了一波计算器相关的知识,希望对你有一定的参考价值。

如图

源码

  1 #include "mainwindow.h"
  2 #include "ui_mainwindow.h"
  3 #include<QString>
  4 
  5 
  6 char *q;
  7 int k=0;
  8 
  9 
 10 
 11 double biaodas();
 12 double xiang();
 13 double yinz()//求一个因子的值
 14 {
 15     double res = 0;
 16     char tem = q[k];
 17     if (tem == \'(\')//因子可能是一个括号包起来的表达式,递归到求表达式
 18     {
 19         k++;
 20         res = biaodas();
 21         k++;
 22     }
 23     else if(tem==\'s\')
 24     {
 25         if(q[k+1]==\'q\')
 26         {
 27             k+=4;
 28             res=sqrt(yinz());
 29         }
 30         else {
 31             k+=3;
 32             res=sin(yinz());
 33         }
 34 
 35     }
 36     else if(tem==\'c\')
 37     {
 38         k+=3;
 39         res=cos(yinz());
 40     }
 41     else if(tem==\'t\')
 42     {
 43         k+=3;
 44         res=tan(yinz());
 45     }
 46     else if(tem==\'l\')
 47     {
 48         k++;
 49         if(q[k]==\'g\')
 50         {
 51             k++;
 52             res=log10(yinz());
 53         }
 54         if(q[k]==\'n\')
 55         {
 56             k++;
 57             res=log(yinz());
 58         }
 59     }
 60     else//计算出多个十进制数字符连续组成的数的大小
 61     {
 62         if(q[k]==\'p\'&&q[k+1]==\'i\')
 63         {
 64             k+=2;
 65             res=3.14159265;
 66             return res;
 67         }
 68         while (isdigit(tem))//判断tem是不是十进制的字符
 69         {
 70             res = res * 10 + tem - \'0\';
 71             k++;
 72             tem = q[k];
 73         }
 74         if (tem == \'.\')//判断有没有小数
 75         {
 76             double k1 = 10;
 77             k++;
 78             tem=q[k];
 79             while (isdigit(tem))
 80             {
 81                 res += (tem-\'0\') / k1;
 82                 k1 *= 10;
 83                 k++;
 84                 tem = q[k];
 85             }
 86         }
 87     }
 88     return res;
 89 }
 90 double xiang()//求一个多项式的值
 91 {
 92     double res = yinz();
 93     int flag = 1;
 94     while (flag)
 95     {
 96         char tem = q[k];
 97         if (tem == \'*\' || tem == \'/\')//判断乘除把多项式的求解分解为求多个因子的值
 98         {
 99            k++;
100             double va = yinz();
101             if (tem == \'*\')
102                 res *= va;
103             else
104                 res /= va;
105         }
106         else flag = 0;
107     }
108     return res;
109 }
110 double biaodas()//求表达式的值
111 {
112     double res = xiang();
113     int flag = 1;
114     while (flag)
115     {
116         char tem = q[k];
117         if (tem == \'+\' || tem == \'-\')//判断乘除把表达式的求解分解为求多多项式的值
118         {
119             k++;
120             double va = xiang();
121             if (tem == \'+\')
122                 res += va;
123             else
124                 res -= va;
125         }
126         else flag = 0;
127     }
128     return res;
129 }
130 
131 
132 
133 
134 
135 
136 
137 
138 
139 
140 
141 
142 
143 
144 
145 
146 MainWindow::MainWindow(QWidget *parent) :
147     QMainWindow(parent),
148     ui(new Ui::MainWindow)
149 {
150     ui->setupUi(this);
151 }
152 QString str;
153 int i=0;
154 
155 MainWindow::~MainWindow()
156 {
157     delete ui;
158 }
159 
160 void MainWindow::on_pushButton_clicked()
161 {
162     char *p=str.toLatin1().data();
163     if(i==0)
164     {
165         str+=\'1\';
166         i++;
167     }
168     else
169     {
170         if(p[i-1]==\')\'||p[i-1]==\'i\');
171         else
172         {
173             str+=\'1\';
174             i++;
175         }
176     }
177     ui->textBrowser->setText(str);
178 }
179 
180 void MainWindow::on_pushButton_2_clicked()
181 {
182     char *p=str.toLatin1().data();
183     if(i==0)
184     {
185         str+=\'2\';
186         i++;
187     }
188     else
189     {
190         if(p[i-1]==\')\'||p[i-1]==\'i\');
191         else
192         {
193             str+=\'2\';
194             i++;
195         }
196     }
197     ui->textBrowser->setText(str);
198 }
199 
200 void MainWindow::on_pushButton_3_clicked()
201 {
202     char *p=str.toLatin1().data();
203     if(i==0)
204     {
205         str+=\'3\';
206         i++;
207     }
208     else
209     {
210         if(p[i-1]==\')\'||p[i-1]==\'i\');
211         else
212         {
213             str+=\'3\';
214             i++;
215         }
216     }
217     ui->textBrowser->setText(str);
218 }
219 
220 void MainWindow::on_pushButton_4_clicked()
221 {
222     char *p=str.toLatin1().data();
223     if(i==0)
224     {
225         str+=\'4\';
226         i++;
227     }
228     else
229     {
230         if(p[i-1]==\')\'||p[i-1]==\'i\');
231         else
232         {
233             str+=\'4\';
234             i++;
235         }
236     }
237     ui->textBrowser->setText(str);
238 }
239 
240 void MainWindow::on_pushButton_5_clicked()
241 {
242     char *p=str.toLatin1().data();
243     if(i==0)
244     {
245         str+=\'5\';
246         i++;
247     }
248     else
249     {
250         if(p[i-1]==\')\'||p[i-1]==\'i\');
251         else
252         {
253             str+=\'5\';
254             i++;
255         }
256     }
257     ui->textBrowser->setText(str);
258 }
259 
260 void MainWindow::on_pushButton_6_clicked()
261 {
262     char *p=str.toLatin1().data();
263     if(i==0)
264     {
265         str+=\'6\';
266         i++;
267     }
268     else
269     {
270         if(p[i-1]==\')\'||p[i-1]==\'i\');
271         else
272         {
273             str+=\'6\';
274             i++;
275         }
276     }
277     ui->textBrowser->setText(str);
278 }
279 
280 void MainWindow::on_pushButton_7_clicked()
281 {
282     char *p=str.toLatin1().data();
283     if(i==0)
284     {
285         str+=\'7\';
286         i++;
287     }
288     else
289     {
290         if(p[i-1]==\')\'||p[i-1]==\'i\');
291         else
292         {
293             str+=\'7\';
294             i++;
295         }
296     }
297     ui->textBrowser->setText(str);
298 }
299 
300 void MainWindow::on_pushButton_8_clicked()
301 {
302     char *p=str.toLatin1().data();
303     if(i==0)
304     {
305         str+=\'8\';
306         i++;
307     }
308     else
309     {
310         if(p[i-1]==\')\'||p[i-1]==\'i\');
311         else
312         {
313             str+=\'8\';
314             i++;
315         }
316     }
317     ui->textBrowser->setText(str);
318 }
319 
320 void MainWindow::on_pushButton_9_clicked()
321 {
322     char *p=str.toLatin1().data();
323     if(i==0)
324     {
325         str+=\'9\';
326         i++;
327     }
328     else
329     {
330         if(p[i-1]==\')\'||p[i-1]==\'i\');
331         else
332         {
333             str+=\'9\';
334             i++;
335         }
336     }
337     ui->textBrowser->setText(str);
338 }
339 
340 void MainWindow::on_pushButton_10_clicked()
341 {
342     char *p=str.toLatin1().data();
343     if(i==0)
344     {
345         str+=\'.\';
346         i++;
347     }
348     else
349     {
350         if(p[i-1]==\'+\'||p[i-1]==\'-\'||p[i-1]==\'*\'||p[i-1]==\'/\'||p[i-1]==\'(\'||p[i]==\')\'||p[i-1]==\'i\');
351         else
352         {
353             str+=\'.\';
354             i++;
355         }
356     }
357     ui->textBrowser->setText(str);
358 }
359 
360 void MainWindow::on_pushButton_11_clicked()
361 {
362     char *p=str.toLatin1().data();
363     if(i==0)
364     {
365         str+=\'0\';
366         i++;
367     }
368     else
369     {
370         if(p[i]==\')\'||p[i-1]==\'i\');
371         else
372         {
373             str+=\'0\';
374             i++;
375         }
376     }
377     ui->textBrowser->setText(str);
378 }
379 
380 void MainWindow::on_pushButton_12_clicked()
381 {
382     char *p=str.toLatin1().data();
383     if(i==0);
384     else
385     {
386         if(p[i-1]==\'+\'||p[i-1]==\'-\'||p[i-1]==\'*\'||p[i-1]==\'/\'||p[i-1]==\'.\'||p[i]==\'(\');
387         else
388         {
389             str+=\'+\';
390             i++;
391         }
392     }
393     ui->textBrowser->setText(str);
394 }
395 
396 void MainWindow::on_pushButton_13_clicked()
397 {
398     char *p=str.toLatin1().data();
399     if(i==0);
400     else
401     {
402         if(p[i-1]==\'+\'||p[i-1]==\'-\'||p[i-1]==\'*\'||p[i-1]==\'/\'||p[i-1]==\'.\'||p[i]==\'(\');
403         else
404         {
405             str+=\'-\';
406             i++;
函数计算性能福利篇 —— 业务冷启动优化

优化 C# 代码片段、ObservableCollection 和 AddRange

看我一波,Android获取进程名函数,代码优化到极致的操作!

是什么优化一波 RPC 框架了。。

是什么优化一波 RPC 框架了。。

是什么优化一波 RPC 框架了。。