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

一般而言,一个十进制数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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值