oj

// simpleCount.cpp : 定义控制台应用程序的入口点。
//
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//#include <iostream>

#define MAX_INPUT_SIZE 256
#define JIA '+'
#define CHEN '*'

char input[MAX_INPUT_SIZE] = {0};

void myStrcpy(char *dst,const char *sorce,int sizeToCpy)
{
 if(-1 == sizeToCpy)
 {
  strcpy(dst,sorce);
 }
 else
 {
  for(int i = 0;i < sizeToCpy;++ i)
  {
   *(dst + i) = *(sorce + i);
  }
 }
}

void getInput()
{
 scanf("%s",input);
}

int firstJiaPos(const char* t,int nlength)
{
 int i;
 for(i = 0;i < nlength && JIA != *(t + i);++ i);
 return nlength == i ? -1 : i;
}

bool onlyContainJia(const char *t,int nlength)
{
 bool onlyContainJia = true;
 
 for(int i = 0;i < nlength;++ i)
 {
  if(CHEN == *(t + i))
  {
   onlyContainJia = false;
   break;
  }
 }
 return onlyContainJia;
}

bool onlyContianChen(const char *t,int nlength)
{
 bool onlyContainChen = true;
 
 for(int i = 0;i < nlength;++ i)
 {
  if(JIA == *(t + i))
  {
   onlyContainChen = false;
   break;
  }
 }
 return onlyContainChen;
}

long long countJia(const char *t,int nlength)
{
 long long result_ = 0;
 
 int lastJia = -1;
 char num[10] = {0};
 bool foundJia = false;
 int i;
 for(i = 0;i < nlength;++ i)
 {
  if(JIA == *(t + i))
  {
   foundJia = true;
   myStrcpy(num,t + lastJia + 1,i - lastJia - 1);
   result_ += atoi(num);
   lastJia = i;
  }
 }

 myStrcpy(num,t + lastJia + 1,i - lastJia - 1);
 result_ += atoi(num);
/* if(false == foundJia)
 {
  myStrcpy(num,t,nlength);
  result_ += atoi(num);
 }
 */
 
 return result_;
}

long long countChen(const char *t,int nlength)
{
 long long result_ = 1;
 
 int lastChen = -1;
 char num[10] = {0};
 bool foundChen = false;
 int i ;
 for(i = 0;i < nlength;++ i)
 {
  if(CHEN == *(t + i))
  {
   foundChen = true;
   myStrcpy(num,t + lastChen + 1,i - lastChen - 1);
   result_ *= atoi(num);
   lastChen = i;
  }
 }
 //last one
 myStrcpy(num,t + lastChen + 1,i - lastChen - 1);
 result_ *= atoi(num);
 return result_;
}

long long count(const char *t,int nlength)
{
 long long result_ = 0;

 int jiaPos = firstJiaPos(t,nlength);
 
 if(-1 != jiaPos)
 {
  // left
  if(onlyContainJia(t,jiaPos))
  {
   result_ += countJia(t,jiaPos);
  }
  else if(onlyContianChen(t,jiaPos))
  {
   result_ += countChen(t,jiaPos);
  }
  else
  {
   result_ += count(t,jiaPos);
  }
  //right
  if(onlyContainJia(t + jiaPos + 1,nlength - jiaPos - 1))
  {
   result_ += countJia(t + jiaPos + 1,nlength - jiaPos - 1);
  }
  else if(onlyContianChen(t + jiaPos + 1,nlength - jiaPos - 1))
  {
   result_ += countChen(t + jiaPos + 1,nlength - jiaPos - 1);
  }
  else
  {
   result_ += count(t + jiaPos + 1,nlength - jiaPos - 1);
  }
 }
 else
 {
  result_ += countChen(t,nlength);
 }
 return result_;
 
}

 

 

int main()
{
 getInput();
 long long result_ = count(input,strlen(input));
 printf("%lld",result_);
 return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值