一般而言,一个十进制数abcd可以这样表示abcd=a∗103a*10^3a∗103+b∗102b*10^2b∗102+c∗101c*10^1c∗101+d∗100d*10^0d∗100.
1.其他进制转换成十进制:
如果一个P进制的数x=d1d_1d1d2d_2d2…dnd_ndn,将其转换成10进制,
y=d1d_1d1*pn−1p^{n-1}pn−1+d2d_2d2pn−2p^{n-2}pn−2+…+dnd_ndn;
**思路:**将最后一项取出来乘以product(product在不断更新1->p->p2p^2p2->…->pn−1p^{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;
}