对内存32字节的数据,也就是256位,以5位分割,计算其整形数值,如11111计算为31,
直到计算到250既可以,一共计算出50个整形保存到数组中,32字节是随机的,在内存中
都是0或1.限C语言实现。
求内存数据转整形的c算法
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
3条回答 默认 最新
白色一大坨 2018-06-08 04:46关注你这个,我姑且理解为大整数除法和求余数,我之前刚好写过一个大整数类,贴出代码你看一下:
这样你可以声明一个大数,然后不断除32算余数和商声明部分
#define MAXN 9999 #define MAXSIZE 10 #define DLEN 4 class HugeInt { private: int a[500]; //可以控制大数的位数 int len; //大数长度 bool sign; public: HugeInt(){ len = 1; memset(a, 0, sizeof(a)); } //构造函数 HugeInt(const int); //将一个int类型的变量转化为大数 HugeInt(const char*); //将一个字符串类型的变量转化为大数 HugeInt operator/(const int &) const; //重载除法运算符,大数对一个整数进行相除运算 int operator%(const int &) const; //大数对一个int类型的变量进行取模运算函数部分:
HugeInt::HugeInt(const char*s) //将一个字符串类型的变量转化为大数 { int t, k, index, l, i; memset(a, 0, sizeof(a)); l = strlen(s); if (s[0] == '-') { sign = false; } else sign = true; len = l / DLEN; if (l%DLEN) len++; index = 0; int end = 0; for (i = l - 1; i >= 0; i -= DLEN) { t = 0; k = i - DLEN + 1; if (k<0) k = 0; for (int j = k; j <= i; j++) { if (s[j] == '-') { t = 0; end = 1; } else { t = t * 10 + s[j] - '0'; } } if (end == 1 && t == 0) { len--; return; } a[index++] = t; } } HugeInt HugeInt::operator/(const int & b) const //大数对一个整数进行相除运算 { HugeInt ret; if (b == 0) return ret; bool bsign = true; if (b < 0) bsign = false; if (sign == bsign) ret.sign = true; else ret.sign = false; int d = abs(b); int i, down = 0; for (i = len - 1; i >= 0; i--) { ret.a[i] = (a[i] + down * (MAXN + 1)) / d; down = a[i] + down * (MAXN + 1) - ret.a[i] * d; } ret.len = len; while (ret.a[ret.len - 1] == 0 && ret.len > 1) ret.len--; return ret; } int HugeInt::operator %(const int & b) const //大数对一个int类型的变量进行取模运算 { int i, d = 0; if (b == 0) return d; for (i = len - 1; i >= 0; i--) { d = ((d * (MAXN + 1)) % b + a[i]) % b; } if (!sign) d = -d; return d; }本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报