|
|
Posted on 2005-10-14 20:06 这里的黄昏静悄悄 阅读(658) 评论(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;
}

|