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; }
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)); }
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; }