Mitko_jos

Calculator

Oct 7th, 2025
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.41 KB | None | 0 0
  1. using System.Text;
  2. //123 + 456 = 579
  3. namespace ConsoleCalculator
  4. {
  5. class Program
  6. {
  7. static void Main()
  8. {
  9. Console.WriteLine("=== Simple Calculator ===");
  10. Console.WriteLine("Type an expression and press '=' to execute.");
  11. Console.WriteLine("Press Enter (empty line) to exit.\n");
  12.  
  13. var expression = new StringBuilder();
  14.  
  15. while (true)
  16. {
  17. var keyInfo = Console.ReadKey(intercept: true);
  18. char keyChar = keyInfo.KeyChar;
  19.  
  20. if (keyInfo.Key == ConsoleKey.Enter)
  21. {
  22. if (expression.Length == 0)
  23. {
  24. Console.WriteLine("\nGoodbye!");
  25. break;
  26. }
  27. else
  28. {
  29. Console.WriteLine();
  30. continue;
  31. }
  32. }
  33.  
  34. if (keyInfo.Key == ConsoleKey.Backspace)
  35. {
  36. if (expression.Length > 0)
  37. expression.Remove(expression.Length - 1, 1);
  38. }
  39. else if (keyChar == '=')
  40. {
  41. // Execute the current expression
  42. Console.WriteLine();
  43. Console.WriteLine(CalculateSimpleExpression(expression.ToString()));
  44. break;
  45. }
  46. else
  47. {
  48. // Append valid characters only
  49. if (char.IsDigit(keyChar) || "+-*/x().".Contains(keyChar))
  50. expression.Append(keyChar);
  51. }
  52.  
  53. Console.Clear();
  54. Console.Write(expression.ToString());
  55. }
  56. }
  57.  
  58. static double CalculateSimpleExpression(string expression)
  59. {
  60. if (string.IsNullOrWhiteSpace(expression))
  61. return 0;
  62.  
  63. var numbers = new List<double>();
  64. var operators = new List<char>();
  65. var current = new StringBuilder();
  66.  
  67. foreach (char c in expression)
  68. {
  69. if (char.IsDigit(c) || c == '.')
  70. {
  71. current.Append(c);
  72. }
  73. else if ("+-*/".Contains(c))
  74. {
  75. if (current.Length > 0)
  76. {
  77. numbers.Add(double.Parse(current.ToString()));
  78. current.Clear();
  79. }
  80. operators.Add(c);
  81. }
  82. }
  83.  
  84. if (current.Length > 0)
  85. numbers.Add(double.Parse(current.ToString()));
  86.  
  87. if (numbers.Count == 0)
  88. return 0;
  89.  
  90. // Perform operations left to right
  91. double result = numbers[0];
  92. for (int i = 0; i < operators.Count; i++)
  93. {
  94. double next = numbers[i + 1];
  95. char op = operators[i];
  96.  
  97. result = op switch
  98. {
  99. '+' => result + next,
  100. '-' => result - next,
  101. '*' => result * next,
  102. '/' => next != 0 ? result / next : double.NaN,
  103. _ => result
  104. };
  105. }
  106.  
  107. return result;
  108. }
  109. }
  110. }
  111.  
Tags: senticeExam
Advertisement
Add Comment
Please, Sign In to add comment