|
Posted on 2005-10-14 20:06 这里的黄昏静悄悄 阅读(625) 评论(0) 编辑 收藏 引用 所属分类: C/C++
问题:如何把模256的6个数转换成模900的5个数,比如(1 2 3 4 5 6)256 = 1×256^5 + 2 ×256 ^4+3 ×256^3+4×256^2 +5 ×256 +6 = 1×900^4 + 620 × 900^3 + 89 ×900^2+74×900+846 = (1 620 89 74 846)900. 问题求解:首先把256进制的数转换成1024进制的数,转换很简单(因为256进制是8位二进制,1024进制是10位二进制),然后在设法把1024进制的数转换成900进制的。 比如χ1 × 1024 ^ 4 + χ2 × 1024^3 = χ1 ×(900+124)^4 + χ2 ×(900+124)^3,展开后可得系数。最后再作个调整即可。
代码如下:(程序不完善,比如可能存在溢出)
#include <iostream>
using namespace std; void _256_2_1024(int* _256, int* _1024) { int digit = 2, n = 6, j = 4,temp = 0; for(int i = 5; i >= 0; i--) { if(digit == 10){ digit = 2; continue; } if(i > 0) { temp = _256[i - 1] << (10 - digit); _256[i - 1] >>= digit; } else temp = 0; _1024[j] = _256[i] | (temp &1023); digit += 2; j--; } } void _1024_2_900(int* _1024, int* _900) { int temp[][5] = {{1, 4*124, 6*124*124, 4*124*124*124, 124*124*124*124}, {0, 1, 3*124, 3*124*124, 124*124*124}, {0, 0, 1, 2*124, 124*124}, {0, 0, 0, 1, 124}, {0, 0, 0, 0, 1}}; int add = 0; for(int i = 5; i >= 0; i--) for(int j = 0; j < 5; j++) { _900[i] += (temp[j][i]*_1024[j]); } for(int k = 4; k >=0; k--) { if(_900[k] / 900 > 0) _900[k - 1] += (_900[k] /900); _900[k] %= 900; } } int main() { int __256[6] = {1,2,3,4,5,6}, i = 0; int _256[] = {1,2,3,4,5,6}; int _1024[5] = {0}; int _900[5] = {0}; _256_2_1024(__256, _1024); _1024_2_900(_1024, _900); cout << '('; for(i = 0; i < 6; i++) cout << '_' << _256[i]; cout <<")256 = ("; for(i = 0; i < 5; i++) cout << '_' << _1024[i]; cout << ")1024 = ("; for(i = 0; i < 5; i++) cout << '_' << _900[i]; cout << ")900" <<endl; return 0; }
|