PAT

1022.D进制的A+B

2018-07-31  本文已影响2人  yzbkaka

题目描述

输入两个非负10进制整数A和B(<=230-1),输出A+B的D (1 < D <= 10)进制数。

输入描述

输入在一行中依次给出3个整数A、B和D。

输出描述

输出A+B的D进制数。

输入例子

123 456 8

输出例子

1103

我的代码

#include<string.h>
#define N 100
int main(){
    int a,b,d,sum,i=0,len;
    char c[N];
    scanf("%d %d %d",&a,&b,&d);
    sum=a+b;
    if(sum==0||d==0){   //注意要考虑到特殊情况0
        printf("0\n");
    }
    if(sum!=0){
        do{
            c[i]=sum%d+'0';
            sum=sum/d;
            i++;
            }while(sum!=0);
            len=strlen(c);
            for(i=len-1;i>=0;i--){   //从后往前开始输出
                printf("%c",c[i]);
            }
            printf("\n");
        }
    return 0;
} 

我的分析

其实这道题我一开始是想简单了,以为测试点会和我们大多数使用的一样测试二,八,十六进制,但是提交之后发现远不止这么点。所以就必须要找到十进制转换为其他进制的通用方法。我这里的方法是利用除数与余数,即将a+b的和sum来除以进制d,得到余数与除数,再将得到的除数再除以d,再得到除数与余数,以此类推,直到除数为0,然后输出之前得到的余数,就是转换后的数了。

收获

这道题让我知道了在输出格式上改变也可以直接输出八进制与十六进制的数字,而输出格式分别为"%o""%x",十分方便。

上一篇 下一篇

猜你喜欢

热点阅读