posts - 32, comments - 59, trackbacks - 0, articles - 2
  IT博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

问题:如何把模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 = 2continue; }
        
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= {{14*1246*124*1244*124*124*124124*124*124*124},
                     
{01,     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;
}

只有注册用户登录后才能发表评论。