目录
Problem Description
Sky从小喜欢奇特的东西,而且天生对数字特别敏感,一次偶然的机会,他发现了一个有趣的四位数2992,这个数,它的十进制数表示,其四位数字之和为2+9+9+2=22,它的十六进制数BB0,其四位数字之和也为22,同时它的十二进制数表示1894,其四位数字之和也为22,啊哈,真是巧啊。Sky非常喜欢这种四位数,由于他的发现,所以这里我们命名其为Sky数。但是要判断这样的数还是有点麻烦啊,那么现在请你帮忙来判断任何一个十进制的四位数,是不是Sky数吧。
Input
输入含有一些四位正整数,如果为0,则输入结束。
Output
若n为Sky数,则输出“#n is a Sky Number.”,否则输出“#n is not a Sky Number.”。每个结果占一行。注意:#n表示所读入的n值。
- #include
- #include
- using namespace std;
- void check(int n) {
- int d = 0, h = 0, dSum = 0;
- int temp = n;
- while (temp > 0) {
- d += temp % 10;
- temp /= 10;
- }
- temp = n;
- string hexStr = "";
- while (temp > 0) {
- int digit = temp % 16;
- hexStr = to_string(digit) + hexStr;
- h += digit;
- temp /= 16;
- }
- temp = n;
- int dN = 0, power = 1;
- while (temp > 0) {
- int digit = temp % 12;
- dN += digit * power;
- dSum += digit;
- power *= 12;
- temp /= 12;
- }
- if (d == h && d == dSum) {
- cout << n << " is a Sky Number." << endl;
- }
- else {
- cout << n << " is not a Sky Number." << endl;
- }
- }
- int main() {
- int n;
- while (cin >> n && n != 0) {
- check(n);
- }
- return 0;
- }
所谓“Sky Number”,根据代码逻辑,是指一个整数满足以下条件时:
#include
部分引入了需要的标准库,
用于输入输出操作,
用于字符串操作。using namespace std;
声明使用标准命名空间。void check(int n)
是检查给定整数n是否为Sky Number的函数。
d
用于存储十进制和,h
用于存储十六进制和,dSum
用于存储十二进制和。hexStr
前部(为了保持逆序,因为每次新求得的余数应为十六进制数的最低位),同时累加这些十六进制数字的和。int main()
是程序的入口点。
check
函数进行检查。这使得程序可以连续检查多个数。Problem Description
把一个偶数拆成两个不同素数的和,有几种拆法呢?
Input
输入包含一些正的偶数,其值不会超过10000,个数不会超过500,若遇0,则结束。
Output
对应每个偶数,输出其拆成不同素数的个数,每个结果占一行。
- #include
- using namespace std;
- bool isPrime(int n) {
- if (n <= 1)
- return false;
- if (n <= 3)
- return true;
- if (n % 2 == 0 || n % 3 == 0)
- return false;
- for (int i = 5; i * i <= n; i = i + 6) {
- if (n % i == 0 || n % (i + 2) == 0)
- return false;
- }
- return true;
- }
- int count(int n) {
- int count = 0;
- for (int i = 2; i <= n / 2; ++i) {
- if (isPrime(i) && isPrime(n - i) && i != (n - i)) {
- count++;
- }
- }
- return count;
- }
- int main() {
- int num;
- while (true) {
- cin >> num;
- if (num == 0)
- break;
- cout << count(num) << endl;
- }
- return 0;
- }
isPrime函数:这是一个判断整数是否为素数的辅助函数。
count函数:计算将一个给定的偶数n拆分成两个不同素数之和的组合数。
main函数:
Problem Description
一个整数,只知道前几位,不知道末二位,被另一个整数除尽了,那么该数的末二位该是什么呢?
Input
Output
对应每组数据,将满足条件的所有尾数在一行内输出,格式见样本输出。同组数据的输出,其每个尾数之间空一格,行末没有空格。
- #include
- using namespace std;
- void find(int a, int b) {
- for (int i = 0; i < 100; i++) {
- int num = a * 100 + i;
- if (num % b == 0) {
- if (i < 10) {
- cout << "0" << i << " ";
- }
- else {
- cout << i << " ";
- }
- }
- }
- cout << endl;
- }
-
- int main() {
- int a, b;
- while (true) {
- cin >> a >> b;
- if (a == 0 && b == 0)
- break;
- find(a, b);
- }
- return 0;
- }
find(int a, int b)
函数:
a
和 b
分别是用户输入的两个整数。aXY
的数字(实际计算中是a*100+i
),检查这个数字是否能被b整除。main()
函数:
find(a, b)
函数执行查找和打印操作。