进制转换&回文串&单词倒排

进制转换

(节选自《算法笔记》)

P进制数转十进制数y

int y=0,product=1;
while(x!=0){
    y=y+(x%10)*product;//y是结果,x%10为了得到个位数
    x=x/10;
    product=prodcut*P;//product的值会分别变成1,p,p^2,p^3,p^4…
}

十进制数y转换成Q进制数z

int z[40],num=0;
do{
    z[num++]=y%Q;//除基取余
    y=y/Q;
}while(y!=0);

这样z数组从高位z[num-1]到低位z[0]即为Q进制z,进制转换完成。

字符串

回文串

回文串是常常出现的一种考题。

对于回文串的处理:1.根据对称性;2.利用for循环,从后向前遍历(逻辑性比较简单)

思路1.

假设字符串str的下标从0开始,由于“回文串”是正读和反读都一样呃字符串,因此只需要遍历字符串的前一半(注意:不需要取到i==len/2),如果出现字符str[i]不等于其对称位置str[len-1-i],就说明这个字符串不是“回文串”;如果前一半的所有字符str[i]都等于对称位置 str[len-1-i],则说明这个字符串是回文串。

#include 
#include 
const int maxn=256;
//判断字符串str是否是“回文串”
bool judge(char str[]){
    int len =strlen(str);//字符串长度
    for(int i=0;i

例题参见:百练 2018计算机学科夏令营上机考试:回文子串

单词倒排

百练 2017大数据研究中心夏令营上机考试 B:单词倒排

& PAT B1009 说反话

比较简单的一道题,输入输出格式大概如下:

样例输入

I am a student

样例输出

student a am I

总之要求是倒序输出。

主要思路,get到一串字符串(包括换行符)

我开始的思路:用string getline(cin,str); 然后根据空格截取字符串,然后倒序输出字符串。

这里最后多输出空格可能会导致格式错误

在网上看到另一个代码感觉也很机智了,直接输入字符存储。(https://blog.csdn.net/vivaespana51/article/details/79742003):

#include 
#include 
using namespace std;
int main() {
    char t[100][100] = {" "};
    int n = 0;
    while (cin >> t[n]) {
        n++;
    }
    for (int i = n - 1; i >= 0; i--)//逆序输出字符串
        printf("%s ", t[i]);
    cout << endl;
    return 0;
}

你可能感兴趣的:(进制转换&回文串&单词倒排)