早教吧作业答案频道 -->其他-->
确定进制描述6*9=42对于十进制来说是错误的,但是对于13进制来说是正确的。即,6(13)*9(13)=42(13),而42(13)=4*131+2*130=54(10)。你的任务是写一段程序读入三个整数p、q和r,然后确
题目详情
确定进制
描述6*9 = 42 对于十进制来说是错误的,但是对于13进制来说是正确的。即, 6(13) * 9(13) = 42(13), 而 42(13) = 4 * 131 + 2 * 130 = 54(10)。 你的任务是写一段程序读入三个整数p、q和 r,然后确定一个进制 B(2<=B<=16) 使得 p * q = r. 如果 B有很多选择, 输出最小的一个。例如: p = 11, q = 11, r = 121. 则有 11(3) * 11(3) = 121(3) 因为 11(3) = 1 * 31 + 1 * 30 = 4(10) 和 121(3) = 1 * 32 + 2 * 31 + 1 * 30 = 16(10)。 对于进制 10,有 11(10) * 11(10) = 121(10)。这种情况下,应该输出 3。如果没有合适的进制,则输出 0。输入输入有 T组测试样例。 T在第一行给出。每一组测试样例占一行,包含三个整数p、q、r。 p、q、r的所有位都是数字,并且1 <= p、q、r <= 1,000,000。输出对于每个测试样例输出一行。该行包含一个整数:即使得p * q = r成立的最小的B。如果没有合适的B,则输出 0。样例输入3
6 9 42
11 11 121
2 2 2 样例输出13
3
0
描述6*9 = 42 对于十进制来说是错误的,但是对于13进制来说是正确的。即, 6(13) * 9(13) = 42(13), 而 42(13) = 4 * 131 + 2 * 130 = 54(10)。 你的任务是写一段程序读入三个整数p、q和 r,然后确定一个进制 B(2<=B<=16) 使得 p * q = r. 如果 B有很多选择, 输出最小的一个。例如: p = 11, q = 11, r = 121. 则有 11(3) * 11(3) = 121(3) 因为 11(3) = 1 * 31 + 1 * 30 = 4(10) 和 121(3) = 1 * 32 + 2 * 31 + 1 * 30 = 16(10)。 对于进制 10,有 11(10) * 11(10) = 121(10)。这种情况下,应该输出 3。如果没有合适的进制,则输出 0。输入输入有 T组测试样例。 T在第一行给出。每一组测试样例占一行,包含三个整数p、q、r。 p、q、r的所有位都是数字,并且1 <= p、q、r <= 1,000,000。输出对于每个测试样例输出一行。该行包含一个整数:即使得p * q = r成立的最小的B。如果没有合适的B,则输出 0。样例输入3
6 9 42
11 11 121
2 2 2 样例输出13
3
0
▼优质解答
答案和解析
#include
#include
using namespace std;
bool OtherScaleToDecimal( int num, int scale, int &decimal_num )
{
decimal_num = 0;
int scale_factor = 1;
while ( num > 0 )
{
int unit = num % 10;
if ( unit >= scale )
return false;
decimal_num += unit * scale_factor;
num = num / 10;
scale_factor *= scale;
}
return true;
}
int CalcScale( int p, int q, int r )
{
int p1, q1, r1;
bool ret;
for ( int scale = 2 ; scale <= 16; scale++ )
{
ret = OtherScaleToDecimal ( p, scale, p1 );
if ( !ret )
continue;
ret = OtherScaleToDecimal( q, scale, q1 );
if ( !ret )
continue;
ret = OtherScaleToDecimal( r, scale, r1 );
if ( !ret )
continue;
if ( p1 * q1 == r1 )
return scale;
}
return 0;
}
void main()
{
int num, p, q, r, scale;
vector< int > scales;
cin >> num;
for( int i = 0; i < num; i++ )
{
cin >> p >> q >> r;
scale = CalcScale( p, q, r );
scales.push_back( scale );
}
for( int i = 0; i < num; i++ )
cout << scales[ i ] << endl;
}
#include
using namespace std;
bool OtherScaleToDecimal( int num, int scale, int &decimal_num )
{
decimal_num = 0;
int scale_factor = 1;
while ( num > 0 )
{
int unit = num % 10;
if ( unit >= scale )
return false;
decimal_num += unit * scale_factor;
num = num / 10;
scale_factor *= scale;
}
return true;
}
int CalcScale( int p, int q, int r )
{
int p1, q1, r1;
bool ret;
for ( int scale = 2 ; scale <= 16; scale++ )
{
ret = OtherScaleToDecimal ( p, scale, p1 );
if ( !ret )
continue;
ret = OtherScaleToDecimal( q, scale, q1 );
if ( !ret )
continue;
ret = OtherScaleToDecimal( r, scale, r1 );
if ( !ret )
continue;
if ( p1 * q1 == r1 )
return scale;
}
return 0;
}
void main()
{
int num, p, q, r, scale;
vector< int > scales;
cin >> num;
for( int i = 0; i < num; i++ )
{
cin >> p >> q >> r;
scale = CalcScale( p, q, r );
scales.push_back( scale );
}
for( int i = 0; i < num; i++ )
cout << scales[ i ] << endl;
}
看了 确定进制描述6*9=42对于...的网友还看了以下:
用配方法说明代数式X的2次-3X+3的值恒大于0,然后说明方程X的2次-3X+3=0的解的情况.若 2020-05-16 …
已知等比数列{an}中an>0,a1+a2+...+a8=4,a1*a2*...*a8=16,则1 2020-06-08 …
用数学归纳法证明(1+q)(1+q^2)(1+q^4)...[1+q^(2n)]=[1-q^(2n 2020-06-08 …
函数求利润的疑惑某厂的总收益函数和总成本函数分别为:R(Q)=18QC(Q)=Q^3-9Q^2+3 2020-07-16 …
确定进制描述6*9=42对于十进制来说是错误的,但是对于13进制来说是正确的。即,6(13)*9( 2020-07-17 …
(2014•天津)已知q和n均为给定的大于1的自然数,设集合M={0,1,2,…,q-1},集合A 2020-07-20 …
因数分解的推论1.如果2^p-1=q是质数,证明2^(p-1)q的正确约数是1,2,2^2,... 2020-07-30 …
等比数列an中a3=7,前三项和s3=21a3=a1*q^2=7;(1)s3=a1(1-q^3)/( 2020-10-31 …
写出下列命题,并判断它们的真假:(1)p∨q,这里p:4∈{2,3},q:2∈{2,3};(2)p∧ 2020-12-13 …
依次填入下面句子横线处的词语,最恰当的一组是()(1)阿Q飘飘然的了一通。(2)阿Q还想上前,两只脚 2020-12-17 …