double integerFromString(const char *buf, int size, int radix)
{
    if (size == 0)
        return qSNaN();

    double sign = 1.0;
    int i = 0;
    if (buf[0] == '+') {
        ++i;
    } else if (buf[0] == '-') {
        sign = -1.0;
        ++i;
    }

    if (((size-i) >= 2) && (buf[i] == '0')) {
        if (((buf[i+1] == 'x') || (buf[i+1] == 'X'))
            && (radix < 34)) {
            if ((radix != 0) && (radix != 16))
                return 0;
            radix = 16;
            i += 2;
        } else {
            if (radix == 0) {
                radix = 8;
                ++i;
            }
        }
    } else if (radix == 0) {
        radix = 10;
    }

    int j = i;
    for ( ; i < size; ++i) {
        int d = toDigit(buf[i]);
        if ((d == -1) || (d >= radix))
            break;
    }
    double result;
    if (j == i) {
        if (!qstrcmp(buf, "Infinity"))
            result = qInf();
        else
            result = qSNaN();
    } else {
        result = 0;
        double multiplier = 1;
        for (--i ; i >= j; --i, multiplier *= radix)
            result += toDigit(buf[i]) * multiplier;
    }
    result *= sign;
    return result;
}
Esempio n. 2
0
    int myAtoi(string str) {
      int i = 0;
      while (i < str.size() && str[i] == ' ') {
        i++;
      }

      int sign = 1;
      if (i < str.size() && (str[i] == '+' || str[i] == '-')) {
        if (str[i] == '-') {
          sign = -1;
        }
        i++;
      }

      long long ans = 0;

      while (i < str.size()) {
        int digit = toDigit(str[i]);
        if (digit == -1) {
          return round(sign * ans);
        } 
        ans = 10 * ans + digit;
        if (sign == 1) {
          if (ans > INT_MAX) {
            return INT_MAX;
          }
        } else {
          if (ans < INT_MIN) {
            return INT_MIN;
          }
        }
        i++;
      } 
      return round(sign * ans);
    }
int eval(string expr) {
	stack<int> num;
	stack<char> op;

	for (int i = 0; i < expr.length(); i++) {
		char c = expr[i];
		if (isDigit(c))
			num.push(toDigit(c));
		else {
		}
	}

	return num.top();
}
Esempio n. 4
0
File: generic.c Progetto: else/xelix
// A small itoa
// Please note it's not standard c syntax.
char* itoa(int num, int base)
{
	if (num == 0)
		return "0"; 
	
	static char buf[8 * sizeof(num) + 1];
	char *res = buf + 8 * sizeof(num);

	*--res = '\0';

	while ((num > 0) && (res >= buf))
	{
		*(--res) = toDigit(num % base);
		num /= base;
	}

	return res;
}
Esempio n. 5
0
  inline uint32_t toUInt(const CharT *s, bool *ok, const int base,
                         const uint32_t max)
  {
    if( ok != 0 ) {
      *ok = false;
    }

    if( s == 0  ||  base < 2  ||  base > 36 ) {
      return 0;
    }

    const uint32_t mulGuard = max / BASE;
    const uint32_t remGuard = max % BASE;

    uint32_t num = 0;

    int dig;
    int i = 0;
    while( (dig = toDigit(s[i++], base)) >= 0 ) {
      if( num > mulGuard ) {
        return 0;
      }

      if( num == mulGuard  &&  DIG > remGuard ) {
        return 0;
      }

      num *= BASE;
      num += DIG;
    }

    if( ok != 0 ) {
      *ok = true;
    }

    return num;
  }
Esempio n. 6
0
// Action_ReplicateCell::Init()
Action::RetType Action_ReplicateCell::Init(ArgList& actionArgs, ActionInit& init, int debugIn)
{
  // Require imaging.
  image_.InitImaging( true );
  // Set up output traj
  std::string trajfilename = actionArgs.GetStringKey("out");
  parmfilename_ = actionArgs.GetStringKey("parmout");
  bool setAll = actionArgs.hasKey("all");
  std::string dsname = actionArgs.GetStringKey("name");
  if (!dsname.empty()) {
    coords_ = (DataSet_Coords*)init.DSL().AddSet(DataSet::COORDS, dsname, "RCELL");
    if (coords_ == 0) return Action::ERR;
  }
  if (trajfilename.empty() && coords_ == 0) {
    mprinterr("Error: Either 'out <traj filename> or 'name <dsname>' must be specified.\n");
    return Action::ERR;
  }
  // Get Mask
  Mask1_.SetMaskString( actionArgs.GetMaskNext() );

  // Determine which directions to set
  if (setAll) {
    for (int ix = -1; ix < 2; ix++)
      for (int iy = -1; iy < 2; iy++)
        for (int iz = -1; iz < 2; iz++) {
          directionArray_.push_back( ix );
          directionArray_.push_back( iy );
          directionArray_.push_back( iz );
        }
  } else {
    std::string dirstring = actionArgs.GetStringKey("dir");
    while (!dirstring.empty()) {
      std::vector<int> ixyz(3, -2);
      std::vector<int>::iterator iptr = ixyz.begin();
      for (std::string::const_iterator c = dirstring.begin();
                                       c != dirstring.end(); ++c)
      {
        if (iptr == ixyz.end()) {
          mprinterr("Error: 'dir' string has too many characters.\n");
          return Action::ERR;
        }
        int sign = 1;
        if      (*c == '+') ++c;
        else if (*c == '-') { sign = -1; ++c; }
        
        if (isdigit( *c ))
          *iptr = toDigit( *c ) * sign;
        else {
          mprinterr("Error: illegal character '%c' in 'dir' string '%s'; only numbers allowed.\n",
                    *c, dirstring.c_str());
          return Action::ERR;
        }
        ++iptr;
      }
      //mprintf("DEBUG: %s = %i %i %i\n", dirstring.c_str(), ixyz[0], ixyz[1], ixyz[2]);
      directionArray_.push_back( ixyz[0] );
      directionArray_.push_back( ixyz[1] );
      directionArray_.push_back( ixyz[2] );
      dirstring = actionArgs.GetStringKey("dir");
    }
  }
  ncopies_ = (int)(directionArray_.size() / 3);
  if (ncopies_ < 1) {
    mprinterr("Error: No directions (or 'all') specified.\n");
    return Action::ERR;
  }
  // Initialize output trajectory with remaining arguments
  if (!trajfilename.empty()) {
    outtraj_.SetDebug( debugIn );
    if ( outtraj_.InitEnsembleTrajWrite(trajfilename, actionArgs.RemainingArgs(),
                                        TrajectoryFile::UNKNOWN_TRAJ, init.DSL().EnsembleNum()) )
      return Action::ERR;
    writeTraj_ = true;
#   ifdef MPI
    outtraj_.SetTrajComm( init.TrajComm() );
#   endif
  } else
    writeTraj_ = false;

  mprintf("    REPLICATE CELL: Replicating cell in %i directions:\n", ncopies_);
  mprintf("\t\t X  Y  Z\n");
  for (unsigned int i = 0; i != directionArray_.size(); i += 3)
    mprintf("\t\t%2i %2i %2i\n", directionArray_[i], 
            directionArray_[i+1], directionArray_[i+2]);
  mprintf("\tUsing atoms in mask '%s'\n", Mask1_.MaskString());
  if (writeTraj_)
    mprintf("\tWriting to trajectory %s\n", outtraj_.Traj().Filename().full());
  if (!parmfilename_.empty())
    mprintf("\tWriting topology %s\n", parmfilename_.c_str());
  if (coords_ != 0)
    mprintf("\tSaving coords to data set %s\n", coords_->legend());

  return Action::OK;
}
Esempio n. 7
0
int main(int argc, char **argv){
  int i=0;

  // define all flags
  int mflag = 0;
  int Mflag = 0;
  int aflag = 0;
  
  // define all values from an option argument
  char* svalue = 0;
  char* ivalue = 0;
  char* evalue = 0;
  char* tvalue = 0;
 
  opterr = 0;
  int c;

  while ((c = getopt (argc, argv, "mMas:i:e:t:")) != -1)
    switch (c)
      {
		case 'm':
		  mflag = 1;
		  break;
		case 'M':
		  Mflag = 1;
		  break;
		case 'a':
		  aflag = 1;
		  break;
		case 's':
		  svalue = optarg;
		  break;
		case 'i':
		  ivalue = optarg;
		  break;
		case 'e':
		  evalue = optarg;
		  break;
		case 't':
		  tvalue = optarg;
		  break;
		case '?':
		  if (strchr("siet", optopt) != NULL)
			fprintf (stderr, "Option -%c requires an argument.\n", optopt);
		  else if (isprint (optopt))
			fprintf (stderr, "Unknown option `-%c'.\n", optopt);
		  else
			fprintf (stderr,
					"Unknown option character `\\x%x'.\n",
					 optopt);
			return 1;
		  default:
			abort ();
    }

    /*
    // Affiche les valeurs des options
	printf ("svalue = %s, tvalue = %s, ivalue = %s, evalue = %s, mflag = %d\n",
			  svalue, tvalue, ivalue, evalue, mflag);

	for (index = optind; index < argc; index++)
		printf ("Non-option argument %s\n", argv[index]);
	*/
	//char *token = strtok(evalue, "");
	
	for(i=0;i<strlen(svalue);i++) {
		printf("\n ########## SCENARIO 0 avec -s %c ##########\n", svalue[i]);
		plaqueInit(toDigit(svalue[i]), atoi(ivalue), aflag, mflag, Mflag);
	}
	//plaqueInit(atoi(svalue));
	return 0;

}
Esempio n. 8
0
/*
 * ===  FUNCTION  ======================================================================
 *         Name:  main
 *  Description:
 * =====================================================================================
 */
int main ( int argc, char *argv[] )
{

  char str[] = "37107287533902102798797998220837590246510135740250 \
46376937677490009712648124896970078050417018260538 \
74324986199524741059474233309513058123726617309629 \
91942213363574161572522430563301811072406154908250 \
23067588207539346171171980310421047513778063246676 \
89261670696623633820136378418383684178734361726757 \
28112879812849979408065481931592621691275889832738 \
44274228917432520321923589422876796487670272189318 \
47451445736001306439091167216856844588711603153276 \
70386486105843025439939619828917593665686757934951 \
62176457141856560629502157223196586755079324193331 \
64906352462741904929101432445813822663347944758178 \
92575867718337217661963751590579239728245598838407 \
58203565325359399008402633568948830189458628227828 \
80181199384826282014278194139940567587151170094390 \
35398664372827112653829987240784473053190104293586 \
86515506006295864861532075273371959191420517255829 \
71693888707715466499115593487603532921714970056938 \
54370070576826684624621495650076471787294438377604 \
53282654108756828443191190634694037855217779295145 \
36123272525000296071075082563815656710885258350721 \
45876576172410976447339110607218265236877223636045 \
17423706905851860660448207621209813287860733969412 \
81142660418086830619328460811191061556940512689692 \
51934325451728388641918047049293215058642563049483 \
62467221648435076201727918039944693004732956340691 \
15732444386908125794514089057706229429197107928209 \
55037687525678773091862540744969844508330393682126 \
18336384825330154686196124348767681297534375946515 \
80386287592878490201521685554828717201219257766954 \
78182833757993103614740356856449095527097864797581 \
16726320100436897842553539920931837441497806860984 \
48403098129077791799088218795327364475675590848030 \
87086987551392711854517078544161852424320693150332 \
59959406895756536782107074926966537676326235447210 \
69793950679652694742597709739166693763042633987085 \
41052684708299085211399427365734116182760315001271 \
65378607361501080857009149939512557028198746004375 \
35829035317434717326932123578154982629742552737307 \
94953759765105305946966067683156574377167401875275 \
88902802571733229619176668713819931811048770190271 \
25267680276078003013678680992525463401061632866526 \
36270218540497705585629946580636237993140746255962 \
24074486908231174977792365466257246923322810917141 \
91430288197103288597806669760892938638285025333403 \
34413065578016127815921815005561868836468420090470 \
23053081172816430487623791969842487255036638784583 \
11487696932154902810424020138335124462181441773470 \
63783299490636259666498587618221225225512486764533 \
67720186971698544312419572409913959008952310058822 \
95548255300263520781532296796249481641953868218774 \
76085327132285723110424803456124867697064507995236 \
37774242535411291684276865538926205024910326572967 \
23701913275725675285653248258265463092207058596522 \
29798860272258331913126375147341994889534765745501 \
18495701454879288984856827726077713721403798879715 \
38298203783031473527721580348144513491373226651381 \
34829543829199918180278916522431027392251122869539 \
40957953066405232632538044100059654939159879593635 \
29746152185502371307642255121183693803580388584903 \
41698116222072977186158236678424689157993532961922 \
62467957194401269043877107275048102390895523597457 \
23189706772547915061505504953922979530901129967519 \
86188088225875314529584099251203829009407770775672 \
11306739708304724483816533873502340845647058077308 \
82959174767140363198008187129011875491310547126581 \
97623331044818386269515456334926366572897563400500 \
42846280183517070527831839425882145521227251250327 \
55121603546981200581762165212827652751691296897789 \
32238195734329339946437501907836945765883352399886 \
75506164965184775180738168837861091527357929701337 \
62177842752192623401942399639168044983993173312731 \
32924185707147349566916674687634660915035914677504 \
99518671430235219628894890102423325116913619626622 \
73267460800591547471830798392868535206946944540724 \
76841822524674417161514036427982273348055556214818 \
97142617910342598647204516893989422179826088076852 \
87783646182799346313767754307809363333018982642090 \
10848802521674670883215120185883543223812876952786 \
71329612474782464538636993009049310363619763878039 \
62184073572399794223406235393808339651327408011116 \
66627891981488087797941876876144230030984490851411 \
60661826293682836764744779239180335110989069790714 \
85786944089552990653640447425576083659976645795096 \
66024396409905389607120198219976047599490197230297 \
64913982680032973156037120041377903785566085089252 \
16730939319872750275468906903707539413042652315011 \
94809377245048795150954100921645863754710598436791 \
78639167021187492431995700641917969777599028300699 \
15368713711936614952811305876380278410754449733078 \
40789923115535562561142322423255033685442488917353 \
44889911501440648020369068063960672322193204149535 \
41503128880339536053299340368006977710650566631954 \
81234880673210146739058568557934581403627822703280 \
82616570773948327592232845941706525094512325230608 \
22918802058777319719839450180888072429661980811197 \
77158542502016545090413245809786882778948721859617 \
72107838435069186155435662884062257473692284509516 \
20849603980134001723930671666823555245252804609722 \
53503534226472524250874054075591789781264330331690\0";

  int i = 0;
  int j = 0;
  int x = 48;
  int tempsum = 0;
  int remainder = 0;
  int carry = 0;
  char total[50];
  char buffer[54];
  total[49] = '\0';

  // 100 lines of 50 characters each
  char delims[] = " ";
  char* result = NULL;
  char* numbers[100];

  result = strtok( str, delims );

  while( result != NULL ) {
    numbers[i] = result;
    i++;
    result = strtok( NULL, delims );
  }

  for (j = 49; j > 0; j--) {
    tempsum = carry;
    for (i = 0; i < 100; i++) {
      tempsum += toDigit(numbers[i][j]);
    }
    carry = tempsum/10;
    remainder = tempsum%10;
    total[x] = toChar(remainder);
    x--;
  }

  for (i = 0; i < 100; i++) {
    carry += toDigit(numbers[i][0]);
  }

  snprintf(buffer, 4, "%d", carry);
  strncat(buffer, total, 49);
  for (i = 0; i < 10; i++) {
    printf("%c", buffer[i]);
  }

  printf("\n");

  return EXIT_SUCCESS;
}