早教吧作业答案频道 -->其他-->
确定进制描述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个字节的二进制整数,若采用补码表示,且由5个1和3个0组成,则可表示的 2020-03-31 …
阅读周朝分封制的规定与周实力表格,你可以获得的正确历史信息有,①分封制是在保证周王室强大的条件下进 2020-05-13 …
长度为1个字节的二进制整数,若采用补码表示,且由5个1和3和0组成,则表示最小的十进制整数为? 2020-05-13 …
2016年9月.“乔歌里1号”中国首台静默移动发电站MFC30正式问世,MFC30是基于甲醇重整制 2020-05-13 …
(2011年)在控制工作中,应对控制费用和控制收益进行比较,这是控制工作的( )。 A.整体性 B. 2020-05-30 …
操作风险评估(RCSA)的原理是按照“固有风险一控制措施=剩余风险”的方法,对业务流程中的( )和控 2020-05-30 …
在控制工作中应对控制费用和控制收益进行比较,这是控制工作的( )要求。A.经济性B.整体性C.客观性 2020-05-30 …
商业银行应在()设立专门的信息科技风险审计岗位,负责信息科技审计制度和流程的实施,制订和执行信息科技 2020-05-31 …
任给n>=2,证明:存在n个互不相同的正整数,其中任意两个的和,整除这n个数的积 2020-06-02 …
单项选择题1.下列关于控制的说法中错误的是:()A、只有高层管理者才需要承担控制的责任B、计划和 2020-06-03 …