您的位置:首页 > 其它

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);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  进制转换