admin 管理员组

文章数量: 1184232


2024年12月22日发(作者:哑终端是什么意思)

确定进制

Description

6*9 = 42 对于十进制来说是错误的,但是对于13 进制来说是正确的。即, 6(13) *

9(13) =

42(13), 而 42(13) = 4 * 13^1 + 2 * 13^0 = 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 *

3^1 + 1 * 3^0 =4(10)

和 121(3) = 1 * 3^2 + 2 * 3^1 + 1 * 3^0 = 16(10)。 对于进制 10,有 11(10) * 11(10)

=121(10)。

这种情况下,应该输出 3。如果没有合适的进制,则输出 0。

Input

输入有 T 组测试样例。 T 在第一行给出。每一组测试样例占一行,包含三个

整数p、q、

r。 p、q、r 的所有位都是数字,并且1 <= p、q、r <= 1,000,000。

Output

对于每个测试样例输出一行。该行包含一个整数:即使得p * q = r 成立的最小

的B。如

果没有合适的B,则输出 0。

Sample Input

3

6 9 42

11 11 121

2 2 2

Sample Output

13

3

0

#include

int isExist(int a,int n)

{

if(a<0) a=-a;

while(a!=0)

{

if(a%10 >= n) return 0;

a=a/10;

}

return 1;

}

int Nto10(int a,int n)

{

int r,k=1,sum=0,flag=1;

if(a<0) {flag=-1;a=-a;}

while(a!=0)

{

r=a%10;

sum+=r*k;

k=k*n;

a=a/10;

}

sum*=flag;

return sum;

}

int main()

{

int i,n;

int p,q,r;

scanf("%d",&n);

while(n--)

{

scanf("%d%d%d",&p,&q,&r);

for(i=2;i<=16;i++)

{

if(!isExist(p,i) || !isExist(q,i) || !isExist(r,i)) continue;

if(Nto10(p,i)* Nto10(q,i) == Nto10(r,i)) break;

}

if(i>16) printf("0n");

else printf("%dn",i);

}

return 0;

}

简单进制转化【1】

Description

把一个十进制正整数转化成八进制

Input

首先输入一个整数 T 表示测试实例的个数,

Output

把每个正整数转化为八进制后输出 占一行。

Sample Input

3

100

8

12

Sample Output

144

10

14

接下来T行,每行一个正整数。

#include

#include

void convers(int n,char s[100])

{

int k=0;

while(n)

{

}

s[k]='0';

strrev(s);

}

int main()

{

int t,n;

char s[100];

scanf("%d",&t);

while(t--)

{

scanf("%d",&n);

convers(n,s);

puts(s);

}

return 0;

}

s[k]=n%8+'0';

k++;

n=n/8;

简单进制转化【2】

Description

把一个八进制正整数转化成十进制

Input

首先输入一个整数 T 表示测试实例的个数,接下来T行,每行输入一个八进制

的正整数。

Output

把每行的八进制正整数转化为十进制后输出

Sample Input

3

144

10

14

Sample Output

100

8

12

#include

#include

int main()

{

int t,d,j,i;

char str[100];

scanf("%d",&t);

for(j=0;j

{

scanf("%s",&str);

d=0;

for(i=0; str[i]!='0';i++)

d=d*8+(str[i]-'0');

}

printf("%dn",d);

return 0;

}

简单进制转化【3】

Description

输入一个2 进制的数,要求输出该2 进制数的16 进制表示。在16 进制的表示

中,

A - F 表示10 - 15

Input

首先输入一个整数 T 表示测试实例的个数,接下来T行,每行输入一个二进制

表示的正整数。

Output

把每行的二进制正整数转化为十六进制后输出

Sample Input

3

1

1010

10000

Sample Output

1

A

10

代码一

#include

#include

#include

#include

int main()

{

char str[1000];

int t,m,n,a,b,x,i;

int sum,j;

scanf("%d",&t);

while(t--)

{

scanf("%s",str);

n=strlen(str);

m=n/4;

x=n%4;

if(x)

{ sum=0;

for(i=x-1;i>=0;i--)

{

a=0;

a=str[i]-'0';

sum=sum+a*(int)pow(2,i);

}

if(sum<10)

printf("%d",sum);

else

printf("%c",sum+55);

}

if(m)

{

for(i=0;i

{

sum=0;

j=4;

while(j--)

{

if(x

{

a=0;

a=str[x++]-'0';

sum=sum+a*(int)pow(2,j);

}

}

if(sum<10)

printf("%d",sum);

else

printf("%c",sum+55);

}

}

printf("n");

}

return 0;

}

代码二

#include

#include

#define max 100

void main()

{

int i,j,x,r,m;

char a[100];

int b[100];

scanf("%d",&x);

for(i=0;i

{

r=0;

scanf("%s",a);

for(j=0;a[j]!='0';j++)

{

}

j=0;

do

{

b[j]=r%16;

r=r/16;

j++;

m=a[j]-48;

r=2*r+m;

}while(r>15);

if(r!=0)

{

b[j]=r;

if(b[j]>9)

printf("%c",b[j]+55);

else

printf("%d",b[j]);

}

for(j=j-1;j>=0;j--)

{

if(b[j]>9)

printf("%c",b[j]+55);

else

printf("%d",b[j]);

}

}

}

printf("n");


本文标签: 进制 输出 表示 测试 转化