fork download
  1. #include <stdio.h>
  2. #include <stdint.h>
  3.  
  4. typedef union {uint16_t u; int16_t s;} container16;
  5. typedef union {uint32_t u; int32_t s;} container32;
  6.  
  7. int32_t mul(uint16_t x, uint16_t y) {
  8. container16 x1, y1;
  9. container32 z1;
  10. x1.u = x;
  11. y1.u = y;
  12. z1.s = x1.s * y1.s + (1uL<<16)*(y1.s*(x1.s<0)+x1.s*(y1.s<0));
  13. return z1.u;
  14. }
  15.  
  16. int main() {
  17. printf("3 * 4 = %d\n", mul(3, 4));
  18. printf("30000 * 4 = %d\n", mul(30000, 4));
  19. printf("3 * 40000 = %d\n", mul(3, 40000));
  20. printf("40000 * 40000 = %d\n", mul(40000, 40000));
  21. return 0;
  22. }
  23.  
Success #stdin #stdout 0s 9424KB
stdin
Standard input is empty
stdout
3 * 4 = 12
30000 * 4 = 120000
3 * 40000 = 120000
40000 * 40000 = 1600000000