【程序基础题目】:回文质数、小玉在游泳、数字反转

162 阅读1分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 11 天,点击查看活动详情

回文质数

题目描述

因为 151151 既是一个质数又是一个回文数(从左到右和从右到左是看一样的),所以 151151 是回文质数。

写一个程序来找出范围 [a,b](5a<b100,000,000)[a,b] (5 \le a < b \le 100,000,000)(一亿)间的所有回文质数。

输入格式

第一行输入两个正整数 aabb

输出格式

输出一个回文质数的列表,一行一个。

样例

  • 样例输入
5 500
  • 样例输出
5
7
11
101
131
151
181
191
313
353
373
383

解题代码

#include<bits/stdc++.h>
using namespace std;

// 检查位数:偶数位的回文数(除了11)必然不是质数 
bool check1(int x) {
    if((1000 <= x && x <= 9999) || (100000 <= x && x <= 999999) || (10000000 <= x && x <= 100000000)) {
        return 0;
    }
    return 1;
} 

// 检查是否回文
bool check2(int x) {
    int a[15], flag = 1;
    while (x > 0) {
        a[flag] = x % 10;
        x /= 10;
        flag++;
    } 
    for (int i = 1; i <= flag / 2; i++) {
        if(a[i] != a[flag-i]) return 0;
    }
    return 1;
} 

// 检查是否为质数 
bool check3(int x) {
    if(x == 2) return 1;
    for(int i = 2; i <= sqrt(x); i++) {
        if(x % i == 0) return 0;
    }
    return 1;
}

int l, r;
int main() {
    cin >> l >> r;
    if(l % 2 == 0) l++;
    
    // 枚举每一个奇数
    for(int i = l; i <= r; i = i + 2) {
        if(check1(i) == 0) continue;
        if(check2(i) == 0) continue;
        if(check3(i) == 0) continue;
        cout << i << endl;
    }	
    return 0;
}

小玉在游泳

题目描述

小玉开心的在游泳,可是她很快难过的发现,自己的力气不够,游泳好累哦。已知小玉第一步能游 22 米,可是随着越来越累,力气越来越小,她接下来的每一步都只能游出上一步距离的 98%98\%。现在小玉想知道,如果要游到距离 xx 米的地方,她需要游多少步呢。请你编程解决这个问题。

输入格式

输入一个实数 ss(单位:米),表示要游的目标距离。

输出格式

输出一个整数,表示小玉一共需要游多少步。

样例

  • 样例输入
4.3
  • 样例输出
3

提示

数据保证,0s1000 \leq s \leq 100,且 ss 小数点后最多只有一位。

解题代码

#include<bits/stdc++.h>
using namespace std;

int result;

long double s, x = 2, sum;

int main()
{
    cin >> s;
    while(sum < s) {
    	sum += x;
    	x = x / 100 * 98;
    	result++;
	}
	cout << result << endl;
    
    return 0;
}

数字反转

题目描述

给定一个整数 NN,请将该数各个位上数字反转得到一个新数。新数也应满足整数的常见形式,即除非给定的原数为零,否则反转后得到的新数的最高位数字不应为零(参见样例 2)。

输入格式

一个整数 NN

输出格式

一个整数,表示反转后的新数。

样例

  • 样例输入1
123
  • 样例输出1
321

  • 样例输入2
-380
  • 样例输出2
-83

提示

【数据范围】

1,000,000,000N1,000,000,000-1,000,000,000\leq N\leq 1,000,000,000

解题代码

#include<bits/stdc++.h>
using namespace std;

int number, result;
int main() {
    cin >> number;
    while(number!=0){
        result = result*10 + number%10;
        number /= 10;
    }
    cout << result;
}

题目来源