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

本文介绍了PAT乙级1022题“D进制的A+B”的解决方法,该题要求输入两个非负十进制整数A和B以及进制数D,输出两数相加后的D进制结果。文章提供了完整的C++代码实现,通过排序和计数等步骤完成转换。

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

题目地址:PAT乙1022. D进制的A+B (20)
题目描述:

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

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

程序:
#include <iostream>
#include <algorithm>
#include <stdio.h>
using namespace std;

int main()
{
    int N[1001];
    int i = 0;
    string str;
    cin >> str;
    while (str[i])
    {
        N[i] = str[i] - '0';
        i++;
    }
    sort(N, N+i);

    int begin = 0;

    for (; begin < i; )
    {
        int point = begin+1;
        while (N[begin] == N[point])
        {
            point++;
        }
        cout << N[begin] << ":" << point-begin << endl;
        begin = point;
    }


}
### 关于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]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值