早教吧作业答案频道 -->其他-->
确定进制描述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对于...的网友还看了以下:
下列有关电场强度的说法是否正确?为什么?1不放q时,电场力为零,所以场强也为零2放入-q测得的E与放 2020-03-30 …
漆包线的型号问题.例如:QZ-1/130,中的1是表示什么?QZ-2/130,中的2又是表示什么? 2020-05-14 …
求一道配凑法详细解说已知f(x+1)=x^2-4 求f(x-1)的表达式.这里,答案是把f(x-1 2020-05-17 …
解二元二次方程式开根号(72.63-X)^2+(130.72-Y)^2=308.17开根号(614 2020-06-12 …
x^2+(x+2)^2=130 2020-07-09 …
口算下面各题.500×3=40×80=40×80=0×930=480÷6=27×30=160×2= 2020-07-09 …
确定进制描述6*9=42对于十进制来说是错误的,但是对于13进制来说是正确的。即,6(13)*9( 2020-07-17 …
一本书的厚度是1.30cm,这本书有260页,问每页多少厘米?有人说是0.1mm,可我算出来是:2 2020-07-18 …
(1)如图1,把△ABC沿DE折叠,使点A落在点A’处,试探索∠1+∠2与∠A的关系.(不必证明) 2020-07-18 …
若∠1与∠2是同旁内角,∠1=50°,则()A.∠2=50°B.∠2=130°C.∠2=50°或∠ 2020-07-29 …