PAT乙级.1022. D进制的A+B (20)
2016-08-18 20:56
471 查看
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);
相关文章推荐
- PAT 乙级 1022. D进制的A+B (20)
- 浙江大学PAT_乙级_1022. D进制的A+B (20)
- [PAT乙级]1022. D进制的A+B (20)
- PAT-乙级-1022. D进制的A+B (20)
- PAT乙级1022. D进制的A+B (20)
- 1022. D进制的A+B (20)-浙大PAT乙级真题java实现
- PAT 乙级 1022. D进制的A+B (20) Java版
- PAT 乙级 1022.D进制的A+B(20)
- 1022. D进制的A+B (20)--PAT乙级
- PAT-乙级-1022. D进制的A+B (20)
- 1022. D进制的A+B (20) PAT乙级
- 乙级 PAT 1022. D进制的A+B (20)
- PAT乙级 1022. D进制的A+B (20) 进制转换
- 【PAT】(乙级)1022. D进制的A+B (20)
- 1022. D进制的A+B (20)-PAT乙级真题
- PAT乙级真题及训练集(16)--1022. D进制的A+B (20)
- PAT乙级1022. D进制的A+B (20)
- PAT乙级 1022. D进制的A+B (20)
- PAT乙级1017. A除以B (20)&&1022. D进制的A+B (20)
- PAT 乙级 1022. D进制的A+B (20)