fork download
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. #include<stdio.h>
  6.  
  7. int output1;
  8.  
  9.  
  10. int strToInt(char * s)
  11. {
  12. int num=0,i=0;
  13.  
  14. for(int i=0;s[i];i++)
  15. {
  16. num = num*10 + s[i]-'0';
  17.  
  18. }
  19.  
  20.  
  21. return num;
  22. }
  23.  
  24. void parseExp(char * exp,int *a,int *b,int *c,char *op,int *missing)
  25. {
  26. int p=0;
  27. int order=0;
  28. int temp=0;
  29.  
  30. *a = -1;
  31. *b = -1;
  32. *c = -1;
  33.  
  34. for (int i = 0; exp[i] ; ++i)
  35. {
  36. if( (exp[i]>='0' && exp[i]<='9') )
  37. {
  38. temp=0;
  39. while( (exp[i]>='0' && exp[i]<='9') )
  40. {
  41. temp = temp * 10 + exp[i]-'0';
  42. i++;
  43. }
  44. if (order==0)
  45. {
  46. *a = temp;
  47. }
  48. else if (order==1)
  49. {
  50.  
  51. *b= temp;
  52. }
  53. else
  54. {
  55. *c = temp ;
  56. }
  57. i--;
  58.  
  59. }
  60. else if (exp[i]=='X')
  61. {
  62. *missing = order ;
  63. }
  64. else
  65. {
  66. if (order==0)
  67. {
  68. *op = exp[i];
  69. }
  70. order++;
  71.  
  72.  
  73. }
  74.  
  75. }
  76.  
  77.  
  78. printf("%s %d %d %d %c %d\n",exp,*a,*b,*c,*op,*missing );
  79.  
  80.  
  81.  
  82.  
  83. }
  84.  
  85. int performOp(int a,int b,char op)
  86. {
  87. switch(op)
  88. {
  89. case '+' : return a+b;
  90. case '-' : return a-b ;
  91. case '/' : return a/b;
  92. case '*' : return a*b;
  93. }
  94. }
  95.  
  96.  
  97. char invertOp(char op)
  98. {
  99. switch(op)
  100. {
  101. case '+' : return '-';
  102. case '-' : return '+' ;
  103. case '*' : return '/';
  104. case '/' : return '*' ;
  105.  
  106. }
  107.  
  108. }
  109.  
  110.  
  111. void arithmetic(char *input1)
  112. {
  113. int a,b,c;
  114. char op;
  115. int missing;
  116. parseExp(input1,&a,&b,&c,&op,&missing);
  117.  
  118. char op2 = invertOp(op);
  119.  
  120. if(missing==0)
  121. {
  122. output1 = performOp(c,b,op2);
  123. }
  124. else if (missing==1)
  125. {
  126. if(op=='/' || op=='-')
  127. {
  128. output1 =performOp(a,c,op);
  129.  
  130. }
  131. else
  132. {
  133. output1 =performOp(c,a,op2);
  134.  
  135. }
  136.  
  137. }
  138. else
  139. {
  140. output1 = performOp(a,b,op);
  141.  
  142. }
  143.  
  144. // output1 = 0;
  145. }
  146.  
  147.  
  148.  
  149.  
  150.  
  151. int main()
  152. {
  153. // your code goes here
  154. char str[100]="1+X=3";
  155. arithmetic(str);
  156. printf("%d",output1);
  157.  
  158.  
  159. return 0;
  160. }
Success #stdin #stdout 0s 16064KB
stdin
2
stdout
1+X=3 1 -1 3 + 1
2