Exemple #1
0
/* Auto-complete data type */
static void
add_number (Digit **start, MokoContactEntry *entry)
{
  gint len, i;
  Digit *cur;

  if (*start == NULL)
    *start = new_digit (NULL);

  cur = *start;

  len = strlen  (entry->number);
  for (i = 0; i < len; i++)
  {
    gchar c = entry->number[i];
    gint n = c - '0';

    if (n < 0 || n > 9)
      n = 10;

    if (cur->digits[n])
    {
      cur = cur->digits[n];
      if (g_list_length (cur->results) < 3)
        cur->results = g_list_append (cur->results, entry);
      continue;
    }
    else
    {
      cur->digits[n] = new_digit (cur);
      cur = cur->digits[n];
      cur->results = g_list_append (cur->results, entry);
    }
  }
}
Exemple #2
0
int main(int argc, const char *argv[]){
    int i;
    node *a, *b, *p;
    for(a=NULL, i=0; argv[1][i]; ++i)
        p = new_digit(argv[1][i]-'0'), p->next = a, a = p;
    for(b=NULL, i=0; argv[2][i]; ++i)
        p = new_digit(argv[2][i]-'0'), p->next = b, b = p;
    print(sum_number(a, b));
    puts("");
    return 0;
}
Exemple #3
0
node* sum_number(node *a, node *b){
    char sum, carry;
    node *head, *end;
    // sum each digit
    for(head=end=new_digit(-1), sum=carry=0; a || b; a=NEXT(a), b=NEXT(b)){
        sum = DIGIT(a) + DIGIT(b) + carry;
        carry = sum>9;
        end = end->next = new_digit(sum % 10);
    }
    // add extra digit when applicable
    if(carry) end->next = new_digit(carry);
    // delete first dummy node
    a = head->next;
    free(head);
    return a;
}