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。输入 3 6 9 42 11 11 121 2 2 2输出13 3 0 我一开始的做法是include<stdio.h>
int f(int y,int x)
{
int m[50],t,n,j,k,l,w;
n=0;
l=0;
t=0;
k=x;
while(y!=0)
{ m[n]=y%10;
y=y/10;
n=n+1; }
for(j=0;j<n;j++)
{ if(l==0)
{
t=t+m[j];
l=1;
continue;
}
if(l==1)
{
t=t+m[j]*x;
x=x*k;
}
} return t ;
}
main()
{
int i,n,a,b,c,j;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
scanf("%d%d%d",&a,&b,&c); for(j=2;j<=16;j=j+1)
{ if((f(a,j)*f(b,j))==f(c,j))
{ printf("%d\n",j);
break;
} if(j==16)
{
printf("0\n");
} } 输入6 9 42 输出 13 这个做到了但是 输入 11 11 121 输出 了2 我知道 2进制没有 121 这个数 但是我把它算进去了希望哪位高人帮我修改这个程序(注意,只要修改即可) 万分感谢
c语言确定进制
答案:1 悬赏:80 手机版
解决时间 2021-04-12 23:34
- 提问者网友:太高姿态
- 2021-04-12 19:29
最佳答案
- 五星知识达人网友:醉吻情书
- 2021-04-12 21:03
在主函数调用自定义函数前,找出输入的数值中单个数位上的最大值,而能够应用的进制数是这个最大值再加1;后面我还改了一个觉得不对的地方,你可以考虑一下。
void main()
{
int i,n,a[3],j,m,max=0;
bool id=false;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
scanf("%d%d%d",&a[0],&a[1],&a[2]);
for(j=0;j<3;j++)
{
m=a[j];
while(m!=0)
{
if(max<m%10)
max=m%10;
m=m/10;
}
}
for(j=max+1;j<=16;j=j+1)
{
if((f(a[0],j)*f(a[1],j))==f(a[2],j))
{
printf("%d\n",j);
id=true;
break;
}
}
if(id==false)
printf("0\n");
}
}
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯