#include <stdio.h> #include <string.h> #include <string> using namespace std; #define MU 10 #define WLEN 100 #define M 100000 struct node{ int id; node *child[MU]; node() { id = -1; memset(child,NULL,sizeof(child)); } }; char fnMap[3][WLEN] = {"1","1"}; void clear(node *root) { for(int i=0; i<MU; i++) { if(root->child[i] != NULL) clear(root->child[i]); } delete root; } void insert(node *root, char *str, int addId) { node *p = root; int len = strlen(str); for(int i=0; i<len && i<40; i++) { int k = str[i] - '0'; if(p->child[k] == NULL) { p->child[k] = new node; } p = p->child[k]; if(p->id < 0) { p->id = addId; } } } int find(node *root, char *str) { node *p = root; int len = strlen(str); for(int i=0; i<len; i++) { int k = str[i] - '0'; if(p->child[k] == NULL) { return -1; } p = p->child[k]; } return p->id; } void add(char *aStr, char *bStr, char *cStr)//aStr + bStr = cStr { int ai = strlen(aStr)-1,bi = strlen(bStr)-1,ci = 0; int all,over = 0; for(; ai>=0 || bi>=0; ai--,bi--) { all = (ai>=0 ? aStr[ai] : '0') + (bi>=0 ? bStr[bi] : '0') + over - 2 * '0'; cStr[ci++] = all % 10 + '0'; over = all / 10; } if(over > 0) cStr[ci++] = over + '0'; cStr[ci] = '