fork(1) download
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<string.h>
  4. #include<ctype.h>
  5. //#define max(x,y) (((int)((x)<(y)) * (y)) + ((int)((y)<=(x)) * (x)))
  6. struct stack
  7. {
  8. char ar[410];
  9. int top;
  10. };
  11. int pop(struct stack *s);
  12. void push(struct stack *s,char temp);
  13. long int mass=0;
  14. int main()
  15. {
  16. struct stack *s=(struct stack*)malloc(sizeof(struct stack));
  17. int t,n,i,cmass;
  18. i=0;
  19. s->top=-1;
  20. char str[410];
  21. gets(str);
  22. while(str[i]!='\0')
  23. {
  24. if(str[i]!=')')
  25. push(s,str[i]);
  26. else
  27. {
  28. cmass=pop(s);
  29. if((s->top!=-1 && (isdigit(str[i+1]) && cmass!=0)))
  30. {
  31. mass=mass+(cmass*((str[i+1]-'0')-1));
  32. i++;
  33. }
  34. else if(isdigit(str[i+1]) && cmass==0)
  35. {
  36. mass=mass*(str[i+1]-'0');
  37. i++;
  38. }
  39. else if((s->top==-1 && (isdigit(str[i+1]) && cmass!=0)))
  40. {
  41. mass=mass*(str[i+1]-'0');
  42. i++;
  43. }
  44. }
  45. i++;
  46. }
  47. char temp;
  48. int flag=0;
  49. int val;
  50. cmass=0;
  51. while(s->top!=-1)
  52. {
  53.  
  54. temp=s->ar[s->top];
  55. if(isdigit(temp))
  56. {
  57. flag=1;
  58. val=temp-'0';
  59. }
  60. else if(temp=='C' && flag==1)
  61. {
  62. cmass=cmass+(12*(val));
  63. flag=0;
  64. }
  65. else if(temp=='C')
  66. cmass=cmass+12;
  67. else if(temp=='O' && flag==1)
  68. {
  69. cmass=cmass+(16*(val));
  70. flag=0;
  71. }
  72. else if(temp=='H' && flag==1)
  73. {
  74. cmass=cmass+(1*(val));
  75. flag=0;
  76. }
  77. else if(temp=='O')
  78. cmass=cmass+16;
  79. else if(temp=='H')
  80. cmass=cmass+1;
  81. s->top--;
  82. }
  83. mass=mass+cmass;
  84. printf("%ld\n",mass);
  85. return 0;
  86. }
  87. void push(struct stack *s,char temp)
  88. {
  89. s->ar[++s->top]=temp;
  90. }
  91. int pop(struct stack *s)
  92. {
  93. char temp;
  94. int flag=0;
  95. int val;
  96. int cmass=0;
  97. while(s->top!=-1 && s->ar[s->top]!='(')
  98. {
  99. temp=s->ar[s->top];
  100. if(isdigit(temp))
  101. {
  102. flag=1;
  103. val=temp-'0';
  104. }
  105. else if(temp=='C' && flag==1)
  106. {
  107. cmass=cmass+(12*(val));
  108. flag=0;
  109. }
  110. else if(temp=='C')
  111. cmass=cmass+12;
  112. else if(temp=='O' && flag==1)
  113. {
  114. cmass=cmass+(16*(val));
  115. flag=0;
  116. }
  117. else if(temp=='H' && flag==1)
  118. {
  119. cmass=cmass+(1*(val));
  120. flag=0;
  121. }
  122. else if(temp=='O')
  123. cmass=cmass+16;
  124. else if(temp=='H')
  125. cmass=cmass+1;
  126. s->top--;
  127. }
  128. if(s->ar[s->top]=='(')
  129. s->top--;
  130. mass=mass+cmass;
  131. return cmass;
  132. }
  133.  
Success #stdin #stdout 0s 4256KB
stdin
Standard input is empty
stdout
0