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; }
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(); }
// 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; }
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; }
// 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; }
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; }
/* * === 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; }