PAT乙级--1022 D进制的A+B

该博客主要介绍了PAT乙级编程题1022 D进制的A+B的解题思路与实现代码。内容包括题目描述、输入输出格式、样例及两段不同的代码实现,分别针对小数和大数的进制转换与加法运算。作者强调了深入学习和保持耐心的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

PAT乙级–1022 D进制的A+B

题目描述

输入两个非负 10 进制整数 A 和 B (≤2^30 −1),输出 A+B 的 D (1<D≤10)进制数。

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

输出格式:
输出 A+B 的 D 进制数。

输入样例:
123 456 8
输出样例:
1103

实现代码

实现代码一
说明:只能实现小数的进制转换

#include<stdio.h>
#define N 100

int main(void)
{
   
   
	int a,b,d;
	scanf("%d %d %d", &a,&b, &d);
	int sum=a+b;
	int result[N];
	int i=0;
	while(sum)
	{
   
   
		result[i++]=sum%d;
		sum/=d;
	}
	if(i==0)
	{
   
   
		printf("0");
	}
	for(int j=i-1;j>=0;j--)
	{
   
   
		printf("%d",result[j]);
	}
}

实现代码一平台测试结果
在这里插入图片描述

实现代码二
说明:实现大数的加法运算和进制转换。

#include<stdio.h>
#include<string.h>
### 关于PAT乙级1017题的C语言解法 #### 题目概述 题目要求计算两个整数相除的结果,其中被除数`A`是一个可能常大的正整数字符串表示形式,而除数`B`则为一个小于等于10的一位正整数输出应包括商余数。 #### 解决方案分析 为了处理这个问题,可以逐位读取被除数并累积到当前部分数值中直到该值大于等于除数为止,在此过程中记录下每次完整的除法操作产生的商以及最后剩余的部分作为最终余数[^3]。 #### 实现细节 - 使用字符数组存储输入的大整数`A`以便能够方便地按位访问每一位数字。 - 初始化变量用于保存临时累加器(`tmp`)、商(`Q`)、余数(`R`)等必要状态量。 - 循环遍历整个字符串中的每一个有效数字字符,并将其转换成对应的十进制数值加入到`tmp`之中。 - 当`tmp`达到或超过给定的除数`B`时执行一次正式的除法运算更新相应的输出结果并向前进一位继续上述过程直至完成全部数据处理工作。 - 特殊情况考虑:如果最开始遇到的情况是单个数字小于除数,则直接给出零作商加上这个单独的小数本身做为余数返回即可。 以下是具体的代码实现: ```cpp #include <iostream> #include <cstring> using namespace std; int main() { char A[1000]; int B; cin >> A >> B; // 处理特殊情况:当A仅有一位且小于B的情况下 if (A[0] - '0' < B && strlen(A) == 1) { cout << "0 " << A[0]; return 0; } int Q = 0, R = 0, i = 0; while (A[i] >= '0' && A[i] <= '9') { int tmp = A[i] - '0' + 10 * R; if (tmp >= B) { cout << tmp / B; R = tmp % B; // 如果不是第一位才打印前面可能出现的0 if (i != 0) { cout << 0; } } else { R = tmp; } ++i; } // 输出最后一个空格后的余数 cout << " " << R; return 0; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值