Exemple #1
0
int main()
{
	char input1[201], input2[201];
	int len1, len2;

	scanf("%s", input1);	scanf("%s", input2);
	len1 = strlen(input1), len2 = strlen(input2);

	if (((len1 == 1) && (input1[0] == '0')) || ((len2 == 1) && (input2[0] == '0')))
	{
		printf("0\n");
		return 0;
	}


	for (int i = 0; i < len1; i++)
		input1[i] -= '0';
	for (int i = 0; i < len2; i++)
		input2[i] -= '0';

	longMul(input1, input2, len1 - 1, len2 - 1);

	return 0;
}
Exemple #2
0
extern "C" Box* mul_i64_i64(i64 lhs, i64 rhs) {
    i64 result;
    if (!__builtin_smull_overflow(lhs, rhs, &result))
        return boxInt(result);
    return longMul(boxLong(lhs), boxLong(rhs));
}
Exemple #3
0
char processToken(num* buffer, char flag, stack* stk){
    char code;
    switch(flag){
    case ' ':
	code = '\0';
	break;
    case 'i':
	code = push(buffer,stk);
	break;
    case '+':
	if (stk->height >= 2){
	    num* arg1 = pop(stk);
	    num* arg2 = pop(stk);
	    code = push(add(arg2,arg1),stk);
	    killOrLetLive(arg1);
	    killOrLetLive(arg2);	    
	} else {
	    code = 'p';
	}
	break;
    case '-':
	if (stk->height >= 2){
	    num* arg1 = pop(stk);
	    num* arg2 = pop(stk);
	    code = push(sub(arg2,arg1),stk);
	    killOrLetLive(arg1);
	    killOrLetLive(arg2);	    
	} else {
	    code = 'p';
	}
	break;

    case '*':
	if (stk->height >= 2){
	    num* arg1 = pop(stk);
	    num* arg2 = pop(stk);
	    code = push(longMul(arg2,arg1),stk);
	    killOrLetLive(arg1);
	    killOrLetLive(arg2);	    
	} else {
	    code = 'p';
	}
	break;

    case '.':
	if(stk->height >= 1){
	    num* top = pop(stk);
	    printNumber(top);
	    killOrLetLive(top);
	    putchar('\n');
	    putchar('\n');	    
	    code = '\0';
	}
	else
	    code = 'p';
    case ':':
	while(stk->top != NULL)
	    killOrLetLive(pop(stk));
	code = '\0';
	break;
    default:
	code = '\0';
	break;
    }
    return code;
}