65,210
社区成员
发帖
与我相关
我的任务
分享
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <inttypes.h>
#include <time.h>
#include <assert.h>
static uint64_t add(uint64_t a, uint64_t b)
{
uint64_t sum, carry;
do
{
sum = a ^ b;
carry = (a & b) << 1;
a = sum;
b = carry;
}while(b);
return a;
}
static uint64_t mul(uint64_t num, uint64_t k)
{
uint64_t result = 0;
while(k)
{
if(k & 0x01) result = add(result, num);
num <<= 1;
k >>= 1;
}
return result;
}
int main(int argc, char **argv)
{
srand(time(NULL));
uint64_t num = rand() % 10000;
uint64_t k = rand() % 10000;
// calc num * k
uint64_t result = mul(num, k);
uint64_t verify = num * k;
assert(verify == result);
printf("%" PRIu64 " x %" PRIu64 " = %" PRIu64 "\n", num, k, result);
return 0;
}