diff --git a/report2.md b/report2.md index ed607ee84d240c1916f314b1013251ea7aa1fed8..0b91f621d0c048d2d807f633d63a73afb13decc2 100644 --- a/report2.md +++ b/report2.md @@ -20,25 +20,212 @@ -## 问题1: - +## ### 1. 问题陈述 +整数的特殊性质 +### 2. 输入、输出描述 +给定一个正整数 n,判断这个数是否具一系列特殊性质,如:奇数(odd number)、偶数(even number)、素数(prime number)、完数(perfect number)、回文数(palindrome number)和水仙花数(narcissistic number)。 -### 2. 输入、输出描述 +### 3. 演算示例 +输入 1: +1 -### 3. 演算示例 +输出 1: + +odd = YES +even = NO +prime = NO +perfect = NO +palindrome = YES +narcissistic = NO + +输入 2: + +、2 + +输出 2: + +odd = NO +even = YES +prime = YES +perfect = NO +palindrome = YES +narcissistic = NO + +输入 3: + +6 + +输出 3: + +odd = NO +even = YES +prime = NO +perfect = YES +palindrome = YES +narcissistic = NO + +输入 4: + +121 + + +输出 4: + +odd = YES +even = NO +prime = NO +perfect = NO +palindrome = YES +narcissistic = NO + +输入 5: + +153 +输出 5: + +odd = YES +even = NO +prime = NO +perfect = NO +palindrome = NO +narcissistic = YES ### 4. 算法设计 +1.算法总体描述: +step1: 输入一个数字 +step2: 判断这个数字是否符合这些特征 +step3:输出结果 + +2.程序代码 +```c +#include //头文件 + +#include + +int main(void) + +{ + + int n; + + scanf("%d",&n); //输入数字 + + if (n % 2 == 0) //如果是偶数 + + + + printf("odd = NO\neven = YES\n"); //输出不是奇数同时是偶数 + + else + + printf("odd = YES\neven = NO\n"); //不是偶数就是奇数输出奇数的结果 + + int s; + + int d; + + if (n <= 1) { //素数是指在大于一的自然数中除了1和它本身以外不在有其他因的自然数,所以小于1一定不是素数 + + printf("prime = NO\n"); + +} else { + + s = (int) sqrt(n); //看自然数的因数把它开平方看前面就行 + + for (d = 2;d <= s;d++) + + if (n % d == 0) + + break; //如果它有其他因式break + + if (d <= s) + + printf("prime = NO\n"); //循环结束如果d <= s说明有其他因式 + + else + + printf("prime = YES\\n"); //否则代表它没有其他因式就是素数 + +} + +if (n == 6 || n == 28 || n == 496) //正整数表示范围内的完数有6,28,496如果不是这些数字那就不是完数 + +printf("perfect = YES\\n"); + +else + +printf("perfect = NO\\n"); + +int x = 0; //回文数是指从左往右和从右往左读都是一样的数字 + +do { + + x++; + + n = n / 10; + +} while (n != 0); //x表示n的位数 + +int sum = 0; + +while (n != 0) { + + + + int m = x - 1; //m = 位数减1 + + sum += n % 10 * pow(10,m); //最后一位到第一位 + + m--; + + n = n / 10; + +} //最后sum为倒序的数字n + +if (sum == n) //如果sum与n 相等说明它就是回文数 + +printf("palindrome = YES\\n"); + +else //不相等就不是回文数 + +printf("palindrome = NO\\n"); + +int nb = 0; //水仙花数是个位数字的立方和相加等于n + +while (n != 0) { + + + + nb += n % 10 \* (n % 10) \* (n % 10); //nb加上每位数字的立方和 + + n /= 10; + +} + +if (nb == n) //如果nb等于n 说明是水仙花数 + +printf("narcissistic = YES\\n"); + +else + //否则不是水仙花数 +printf("narcissistic = NO\\n"); + + + +return 0; //return 0 程序结束 +} +``` ### 5. 测试