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");
版权声明:本文标题:C语言进制转换 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/p/1734958758a1614681.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论