关于进制转换问题+PAT乙级 1022 D进制的A+B

it2024-11-13  13

一般而言,一个十进制数abcd可以这样表示abcd= a ∗ 1 0 3 a*10^3 a103+ b ∗ 1 0 2 b*10^2 b102+ c ∗ 1 0 1 c*10^1 c101+ d ∗ 1 0 0 d*10^0 d100. 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} pn1+ d 2 d_2 d2 p n − 2 p^{n-2} pn2+…+ d n d_n dn; **思路:**将最后一项取出来乘以product(product在不断更新1->p-> p 2 p^2 p2->…-> p n − 1 p^{n-1} pn1)

代码:

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; }
最新回复(0)