2017-07-27 102 views
-1

在我的程序中,给定随机数的随机操作,使用随机数ex。 2 + 5/2 - 5 + 2 *(9 - 5)/ 2 - 我需要检查计算数字时是否会出现除零误差。我将如何做到这一点,而且我自己也不会发生错误?检查除以零

代码:

for (int i = 0; i < randNumOfOperations; i++) { 
    int randDecision = rand() % 5 + 1; 
    int randDecision2 = rand() % 4 + 1; // inside() operations 
    int randDecision3 = rand() % 4 + 1; // outside() operations 
    int randNum = rand() % 15 + 1; 
    int parenRandNum = rand() % 20 + 1; 
    int parenRandNum2 = rand() % 20 + 1; 
    std::string tempstr = std::to_string(randNum); 
    std::string tempstr2 = std::to_string(parenRandNum); 
    std::string tempstr3 = std::to_string(parenRandNum2); 
switch (randDecision) { 
     case 1: 
      nStr.append(tempstr); 
      nStr.append(" + "); 
      break; 
     case 2: 
      nStr.append(tempstr); 
      nStr.append(" - "); 
      break; 
     case 3: 
      nStr.append(tempstr); 
      nStr.append(" * "); 
      break; 
     case 4: 
      nStr.append(tempstr); 
      nStr.append("/"); 
      break; 
     default: 
      break; 
    } 

    if (randDecision == 5) { //() operations 
     nStr.append(" ("); 
     switch (randDecision2) { 
     case 1: 
      nStr.append(tempstr2); 
      nStr.append(" + "); 
      nStr.append(tempstr3); 
      break; 
     case 2: 
      nStr.append(tempstr2); 
      nStr.append(" - "); 
      nStr.append(tempstr3); 
      break; 
     case 3: 
      nStr.append(tempstr2); 
      nStr.append(" * "); 
      nStr.append(tempstr3); 
      break; 
     case 4: 
      nStr.append(tempstr2); 
      nStr.append("/"); 
      nStr.append(tempstr3); 
      break; 
     default: 
      break; 
     } 

     nStr.append(") "); 

     switch (randDecision3) { 
     case 1: 
      nStr.append(" + "); 
      break; 
     case 2: 
      nStr.append(" - "); 
      break; 
     case 3: 
      nStr.append(" * "); 
      break; 
     case 4: 
      nStr.append("/"); 
      break; 
     default: 
      break; 
     } 

    } 
} 

该代码把该随机表达到字符串NSTR。

+5

你如何评价表达?如果您正在解析它并处理分析树,则可以在每个分割节点中检查除数是否为零。 –

+0

我会咬人。你为什么需要这个? –

+0

用我的代码更新了帖子以生成表达式。 – africantraplord

回答

-1

我会去了解一下如何构建表达式树并使用它来评估表达式。这将使检查除以零的操作变得简单,而且效率很高。您以后也可以将其用于许多不同的应用程序。 http://www.geeksforgeeks.org/expression-tree/

-2

检查一次u有它全部解析if语句以0将返回false

if(devisor) 
result=result/devisor; 

我有一个类似的项目在GitHub上做
for a recursive approach
using a list and stack

+0

如果在表达式中显然是parens,你怎么能假设标记化? –

+0

你可以做一个函数双操作符(双a,char操作符,双b) –

+0

这根本不应答任何东西。 –