一般而言,一个十进制数abcd可以这样表示abcd=
a
∗
1
0
3
a*10^3
a∗103+
b
∗
1
0
2
b*10^2
b∗102+
c
∗
1
0
1
c*10^1
c∗101+
d
∗
1
0
0
d*10^0
d∗100.
1.其他进制转换成十进制:
如果一个P进制的数x=
d
1
d_1
d1
d
2
d_2
d2…
d
n
d_n
dn,将其转换成10进制,
y=
d
1
d_1
d1*
p
n
−
1
p^{n-1}
pn−1+
d
2
d_2
d2
p
n
−
2
p^{n-2}
pn−2+…+
d
n
d_n
dn;
**思路:**将最后一项取出来乘以product(product在不断更新1->p->
p
2
p^2
p2->…->
p
n
−
1
p^{n-1}
pn−1)
代码:
int y =0,int product = 1;
while(x!=0){
y = y+(x%10)*product;
x = x/10;
product = product*p;
}
2.十进制转换成其他进制:
用的是除基取余法.
11除以2,得商为5,余数为1;
5除以2,得商为2,余数为1;
2除以2,得商为1,余数为0;
1除以2,得商为0,余数为1;算法结束
int a[40], num=0;
do{
z[num++1] = y%Q;
y = y/Q;
}while(y!=0);
PAT乙级 1022 D进制的A+B
题目描述:
输入两个非负10进制整数A和B(<=230-1),输出A+B的D (1 < D <= 10)进制数。
输入格式:
输入在一行中依次给出3个整数A、B和D。
输出格式:
输出A+B的D进制数。
输入样例:
123 456 8
输出样例:
1103
代码:
#include<stdio.h>
int main(){
long long a,b;
int d;
while(scanf("%d%d%d",&a,&b,&d)!=EOF){
int sum = a+b;
int v[31],num=0;
do{
v[num++]=sum%d;
sum=sum/d;
}while(sum!=0);
for(int i=num-1;i>=0;i--){
printf("%d",v[i]);
}
printf("\n");
}
return 0;
}