PAT 1022D进制的A+B

本文详细解析了PAT1022题目,即如何将两个非负十进制整数A和B的和转换为指定进制D(1<D≤10)的数表示。通过使用C++的堆栈数据结构,实现了从低位到高位的逆序输出,解决了D进制数的转换与输出问题。

PAT 1022D进制的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

思路: 由于d是小于等于10的,而且A,B的和最大是小于int的最大值的,所以不用考虑爆int的问题。然后就不断用A,B的和对D进行取模运算。逆序输出即可。代码如下 :

#include <iostream>
#include <stack>
#define LL long long
using namespace std;
int main()
{
	int a,b,d;
	scanf("%d%d%d",&a,&b,&d);
	int t=a+b;
	if(t==0){//要特判一下和为0的情况
		cout<<0<<endl;
		return 0;
	}
	stack<int> v;
	while(t){
		v.push(t%d);
		t/=d;
	}
	while(!v.empty()){
		cout<<v.top();
		v.pop();
	}
	return 0;
}

 

### 关于PAT A1015的题目描述 PAT A1015 的全名是 **"Reversible Primes" (可逆素数)**,这是一道关于素数及其性质的经典算法题。该题目要求判断一个给定的整数是否是一个可逆素数。所谓可逆素数是指:如果一个正整数 \( N \) 是素数,并且它的十进制表示反转后的数字也是素数,则称其为可逆素数。 #### 题目具体要求 输入包含多组测试数据,每组测试数据给出两个整数 \( D_1 \) 和 \( B \),其中 \( D_1 \) 表示待检测的数字,\( B \) 表示基数(即 \( D_1 \) 应被解释为 \( B \)-进制下的数值)。程序需判断 \( D_1 \) 是否为其对应的 \( B \)-进制下以及反转后再转换回十进制后均为素数的情况[^2]。 --- ### 解决方案分析 为了完成此任务,可以按照如下逻辑实现: 1. 将 \( D_1 \) 从 \( B \)-进制转换到十进制; 2. 判断原始十进制值是否为素数; 3. 对应的十进制值进行反转操作; 4. 再次验证反转后的值是否仍为素数; 以下是具体的 Python 实现代码: ```python def is_prime(n): """判断n是否为素数""" if n <= 1: return False for i in range(2, int(n**0.5)+1): if n % i == 0: return False return True def reverse_number_in_base(num_str, base): """将字符串形式的num在base进制下反转并转成十进制""" reversed_num_str = num_str[::-1] decimal_value = 0 power = 0 for char in reversed(reversed_num_str): digit = int(char) if digit >= base: # 如果某一位大于等于基底,则非法 return -1 decimal_value += digit * (base ** power) power += 1 return decimal_value while True: try: d1_b_pair = input().split() d1, b = map(int, d1_b_pair) # Step 1: Convert from base-b to decimal. original_decimal = int(str(d1), b) # Check if the converted number is prime. if not is_prime(original_decimal): print("No") continue # Reverse the digits of `d1` as a string representation. reversed_d1 = str(d1)[::-1] # Convert back into its new value after reversing it under same radix system 'b'. rev_dec_val = reverse_number_in_base(reversed_d1, b) if rev_dec_val != -1 and is_prime(rev_dec_val): print("Yes") # Both conditions met. else: print("No") except EOFError: break ``` 上述代码实现了完整的功能需求,包括但不限于进制转换、素性检验和数字翻转处理等功能模块化设计。 --- ### 注意事项 - 输入中的 \( D_1 \) 可能含有前导零,在实际计算过程中需要注意去除这些无意义的部分。 - 当遇到某些位上的数值超过当前指定基数范围时,应该立即返回错误标志 `-1` 来终止进一步不必要的运算过程[^3]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值