十六进制大数除法c语言,c语言-大数乘法(16进制)(示例代码)

1 #include

2

3 typedef unsigned charu8;4 typedef unsigned intu32;5

6 #define N 32

7 #define CARRYNUM 0x100

8

9 void BigMul(u8* res_high, u8* res_low, u8 *a, u8 *b)10 {11 intai, bi, ri;12 u32 tmp;13 u32 res[N*2] = {0};14 u8 c[N*2] = {0};15

16 //乘法计算核心部分

17 for(ai = N-1; ai >= 0; ai--) //a从后往前,低位往高位乘起来

18 {19 for(bi = N-1; bi >=0; bi--) //b从后往前,低位往高位乘起来

20 {21 tmp = a[ai] *b[bi];22 res[ai+bi+1] += (tmp % CARRYNUM); //取低位,并累加所有相同下标

23 res[ai+bi] += (tmp / CARRYNUM); //取高位,并累加所有相同下标

24 }25 }26 for(ri = (2*N)-1; ri > 0; ri--)27 {28 if(res[ri] > CARRYNUM-1) //从res低位开始判断,若大于0x100,向高位进位

29 {30 res[ri-1] += (res[ri]/CARRYNUM); //低位 进位数加到 高位

31 res[ri] = res[ri]%CARRYNUM; //低位数的进位去掉,保留低位数的低位

32 }33 }34

35 //输出

36 for(ri = 0; ri < 2*N; ri++)37 {38 if(ri

41 res_low[ri-N] =res[ri];42 }43 return;44 }45

46 void print_num(u8* res_high, u8*res_low)47 {48 int i = 0;49 for(i = 0; i < N; i++)50 {51 printf("%02x", res_high[i]);52 }53

54 for(i = 0; i < N; i++)55 {56 printf("%02x", res_low[i]);57 }58 }59

60 voidmain()61 {62 //数组[0]数据高位, [31]数据低位63 //u8 a[N] = {0xDE,0x2A,0x7C,0xF8,0x48,0x24,0xCF,0xA0,0xCE,0xD7,0x16,0xAD,0xF5,0xD4,0x7D,0xE9,0x3D,0xFA,0x31,0xEB,0x69,0x26,0xB7,0xF7,0xDF,0x69,0xBD,0xE0,0x1F,0x9E,0xDB,0x0D};64 //u8 b[N] = {0x5A,0x1C,0x23,0x99,0x87,0x70,0x82,0xB8,0x12,0x50,0xCB,0x2A,0x7F,0x8B,0x74,0x53,0x5D,0x38,0x05,0xB5,0xB0,0xFE,0x8C,0x0E,0xF1,0xE7,0x73,0x15,0x47,0xD4,0x9A,0xA2};65

66 //u8 a[N] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};67 //u8 b[N] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};68

69 //u8 a[N] = {0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11};70 //u8 b[N] = {0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11};71

72 //u8 a[N] = {0x00,0x00,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11};73 //u8 b[N] = {0x00,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11};

74

75 u8 a[N] = {0x00,0x00,0x00,0xD1,0xB8,0xAA,0x3E,0x1B,0x32,0xDB,0xB9,0x5A,0x13,0xB3,0x52,0x79,0x10,0x22,0x1E,0x47,0x49,0x00,0x8D,0xF9,0xA3,0x40,0xE6,0x9D,0x68,0x38,0x2C,0x58};76 u8 b[N] = {0x00,0x00,0x00,0x00,0x00,0xBF,0xB7,0x4C,0x0C,0xBF,0x09,0x13,0x1E,0x1E,0xEC,0x72,0x21,0x60,0xE5,0x5F,0xAD,0xCF,0x8E,0x50,0x50,0xE7,0xBA,0xF5,0xE9,0x6B,0x3D,0x5E};77

78

79 u8 res_high[N] = {0};80 u8 res_low[N] = {0};81 int i = 0;82

83 BigMul(res_high, res_low, a, b);84

85 print_num(res_high, res_low);86

87 }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值