这是我的第一个作品。
1000: 求1+2+3+.....+n
题目
根据用户输入的任意n,求1+2+3+.....+n的值。
输入样例
100
输出样例
5050
这道题非常简单,用for循环,从一到n,累加到变量x,再输出x。
#include <bits/stdc++.h>
using namespace std;
int n,x;
int main() {
cin>>n;
for(int i=1;i<=n;i++){
x+=i;
}
printf("%d",x);
return 0;
}
1003:水仙花数
题目
水仙花数是指一个三位数,其各位数字的立方和等于该数本身。
例如:153是一个水仙花数,因为:++=153
3位数的水仙花数共有4个,请编写程序,求出这4个水仙花数,每行一个。
还是使用for循环,从100到999,每次定义三个变量x,y,z,分别获取百位、十位、个位。如果它们三次方的和等于i,就输出来。
#include <iostream>
using namespace std;
int main()
{
int a=100,x,y,z;
while(a<999){
a++;
x=a/100;
y=(a/10)%10;
z=a-(x*100)-(y*10);
if((x*x*x)+(y*y*y)+(z*z*z)==a){
printf("%d ",a);
}
}
return 0;
}
1008: 求Sn=1!+2!+3!+4!+5!+…+n!
题目
求Sn=1!+2!+3!+4!+5!+…+n!之值,其中n是一个数字
n! = n * (n-1) * (n-2) .....3*2*1
输入样例
5
输出样例
153
n!就是n的阶乘,5!=1*2*3*4*5,4!=1*2*3*4,3!=1*2*3,2!=1*2,1!=1,因此可以看出,这道题可以用双重循环。
外层:
i=1;i<=n;i++;
内层:
j=1;j<=i;j++;
但是,也不难发现,在计算5!的过程中,已经计算了4!、3!、2!、1!,所以更简单的方法:
在计算n!的过程中把中途的每个值都加起来。
注意:阶乘的结果较大,用long long。
#include <bits/stdc++.h>
using namespace std;
int main() {
long long n, a = 0, b=1;
cin >> n;
for (int i = 1; i <= n; i++) {
b *= i;
a += b;
}
cout << a;
return 0;
}
1009: 同因子数查找
题目
求出10至1000之内能同时被2、3、7整除的数,并输出。
#include <iostream>
#include <cstdio>
#include <stdio.h>
using namespace std;
int main() {
for(int i=10;i<=1000;i++){
if(i%2==0&&i%3==0&&i%7==0){
printf("%d\n",i);
}
}
return 0;
}
1019: 求阶乘
题目
求任意给定整数的阶乘。阶乘的表示方法为:3! = 3 * 2 * 1
n != n * (n-1) * (n-2) * .....*1
0 ! = 1
输入样例
3
输出样例
6
和1008是一个道理,只不过不用加中间的数。
#include <iostream>
using namespace std;
int main()
{
long long n,a=1;
cin>>n;
for(int i=n;i>=1;i--)
{
a*=i;
}
cout<<a;
return 0;
}
1020:判断一个数是否是素数
题目
素数(prime number)又称质数。素数定义为在大于1的自然数中,除了1和它本身以外不再有其他因数。1不是素数。
如果输入的数是素数则输出Yes,否则输出No。
输入样例
3
输出样例
Yes
首先1要特殊判断,后面的用for循环判断。但是要注意最大,一秒也就,得减少次数。如果一个合数(非素数)的因数an,但n/a,也就是另一个因数一定小于n,所以,合数就能用它的平方根次算出来。
#include <bits/stdc++.h>
using namespace std;
int main() {
long long n;
cin>>n;
if(n==1){
cout<<"No";
return 0;
}
for(long long i=2;i<=sqrt(n);i++){
if(n%i==0){
cout<<"No";
return 0;
}
}
cout<<"Yes";
return 0;
}