PAT数字&字符串处理

目录

🧡1019 General Palindromic Number(20)

🧡1024 Palindromic Number(25)

🧡1100 Mars Numbers(20)

🧡常用语法


💟这里是CS大白话专场,让枯燥的学习变得有趣!

💟没有对象不要怕,我们new一个出来,每天对ta说不尽情话!

💟好记性不如烂键盘,自己总结不如收藏别人!

💌数字&字符串处理也是PAT的考试重点,记录一下常用易混语法o(╥﹏╥)o

🧡1019 General Palindromic Number(20)

题目链接:PTA | 程序设计类实验辅助教学平台

💌将十进制数N转换成b进制数,判断其是否为对称数。

#include <iostream>
#include <cstdio>
#include <vector>
using namespace std;
vector<int> s; //存储b进制数

void trans(int N,int b){
    int i=0;
    while(N){
        s.push_back(N%b);
        N = N/b;
    }
}

void out(vector<int> s){
    //倒序输出
    for(int i=s.size()-1;i>=0;i--){
        cout << s[i];
        if(i) cout << " ";
        else cout << endl;
    }
}

int main(){
    int N,b;
    cin >> N >> b;
    trans(N,b);
    for(int i=0;i<s.size()/2;i++){
        if(s[i]==s[s.size()-1-i]) continue;
        else {
            cout << "No" << endl;
            out(s);
            return 0;
        }
    }
    cout << "Yes" << endl;
    out(s);
    return 0;
}

🧡1024 Palindromic Number(25)

题目链接:PTA | 程序设计类实验辅助教学平台

💌给出一个数N,经过不多于K次的翻转相加,判断是否会生成对称数。

#include <iostream>
#include <algorithm>
using namespace std;
string N;

void add(string t) {
    int len=N.length(),add=0;
    for(int i=0;i<len;i++){
        N[i] = N[i]+t[i]+add-'0';
        if(N[i] > '9') {
            N[i] = N[i] - 10;
            add = 1;
        }
        else add = 0;
    }
    if(add) N.append("1");
    reverse(N.begin(), N.end());
}

int main() {
    int K, k;
    cin >> N >> K;
    for(k=0;k<=K;k++){
        string t=N;
        reverse(t.begin(), t.end());
        if(N == t || k == K) break;
        add(t);
    }
    cout << N << endl << k << endl;
    return 0;
}

🧡1100 Mars Numbers(20)

💌翻译数字与火星文。

#include <iostream>
#include <cstdio>
#include <string>
using namespace std;
string low[13] = {"tret","jan","feb","mar","apr","may","jun","jly","aug","sep","oct","nov","dec"};
string high[13] = {" ","tam","hel","maa","huh","tou","kes","hei","elo","syy","lok","mer","jou"};

void EarthToMars(int t){
    int a = t/13;
    int b = t%13;
    if(a&&b) cout << high[a] << " " << low[b] << endl;
    //注意低位为0时不用输出
    else if(a&&!b) cout << high[a] << endl;
    else cout << low[b] << endl;
}

void MarsToEarth(string s){
    int t1=0,t2=0;
    //截取高位(若没有高位,则为低位)
    string s1 = s.substr(0,3),s2;
    //若有高位,截取低位
    if(s.length()>4) s2 = s.substr(4,3);
    for(int i=1;i<13;i++){
        if(s1==low[i] || s2==low[i]) t2 = i;
        if(s1==high[i]) t1 = i;
    }
    cout << t1*13+t2 << endl;
}

int main(){
    int N;
    string s;
    cin >> N;
    getchar();
    for(int i=0;i<N;i++){
        //读取一行
        getline(cin, s);
        //如果是地球字符
        if(s[0]>='0'&&s[0]<='9')
            EarthToMars(stoi(s));
        else
            MarsToEarth(s);
    }
    return 0;
}

🧡常用语法

#include <iostream>
#include <cstdio>
#include <string>
using namespace std;

int main(){

    //string 转 int
    string a;
    cin >> a;
    cout << stoi(a);  //整体转换

    int b = a[0]-'0'; //计算单个数值
    cout << b;

    getchar(); //读取一位

    string s;
    getline(cin, s); //读取一行
    s.append("1");  //字符串扩展
    reverse(s.begin(), s.end());  //字符串翻转
    s.substr(0,3);  //从0位开始截取前3位

    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值