PAT乙级.1022. D进制的A+B (20)

来源:互联网 发布:linux虚拟机挂载光盘 编辑:程序博客网 时间:2024/04/20 01:54

1022. D进制的A+B (20)


题目:

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

输入格式:

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

输出格式:

输出A+B的D进制数。

输入样例:

123 456 8

输出样例:

1103

PAT链接


思路:

1.先计算A+B的值,然后用除基取余法来得到将结果转化为D进制

    do  //用do是考虑sum为0的情况    {        res[num++] = sum % D;        sum = sum / D;    } while (sum != 0);

2.用31位的数组来存储最后的结果,最后由高到低依次打印结果


代码:

/*** @tag     PAT_B_1022* @authors R11happy (xushuai100@126.com)* @date    2016-8-18 18:47-19:01* @version 1.0* @Language C++* @Ranking  310/2280* @function null*/#include <cstdio>#include <cstdlib>#include <cstring>int main(int argc, char const *argv[]){    int A, B, D;    int res[31];    //最多31位,用数组来存放最后的结果    scanf("%d%d%d", &A, &B, &D);    int sum = A + B;    int num = 0;    //记录位数    do  //用do是考虑sum为0的情况    {        res[num++] = sum % D;        sum = sum / D;    } while (sum != 0);    //从高位开始输出    for (int i = num - 1; i >= 0; i--)    {        printf("%d", res[i]);    }    printf("\n");    return 0;}

收获:

1.将P进制数x转换为十进制数y:

int y = 0, product = 1; //product在循环中会不断乘p,得到1,p,p^2,p^3……while(x != 0){    y = y + (x % 10) * product;    x = x / 10; //去掉x的个位    product = product * P; }

2.“除基取余法”将十进制数y转换为Q进制数z

    do  //用do是考虑sum为0的情况    {        res[num++] = sum % D;        sum = sum / D;    } while (sum != 0);
0 0
原创粉丝点击