优化了一波计算器
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