1.阶乘?阶乘的和?
题目:计算n个数的阶乘之和。OK,那么,阶乘是什么东西????
阶乘即n!=1234567*………*n,很像数列的前n项和变成了前n项乘积。
那我直接按算前n项和的方法算阶乘就行咯:
- #include <iostream>
- using namespace std;
- int main(){
- int n,s=1;
- cin >> n;
- for (int i=1;i<=n;i++)
- s*=i!;
- return 0;
- }
阶乘的算法其实很简单,按数列的思路就可以得到。就是分别得到出1~n,然后将他们循环相乘就可以了:
- #include<iostream>
- using namespace std;
- int main(){
- int i,res=1;
- cin >> n;
- for (i=1;i<=n;i++)
- res*=i;
- return res;
- }
我的第一个想法是,把它们分开,这样比较清晰。将第二个计算阶乘的for循环拉出来,单独写个函数,然后在计算和的时候调用就可以了。这确实是个相当好的方法,我也不喜欢俄罗斯套娃式的代码(其实是自己脑子转不过来),于是就有了下面的代码:
- #include<iostream>
- using namespace std;
- int fac(int j);
- int main(){
- int i,n,sum;
- cin >> n;
- for (int i=1;i<=n;i++)
- sum+=fac(i);
- cout << sum;
- }
- int fac(int j){
- int i,res=1;
- for (i=1;i<=j;i++)
- res*=i;
- return res;
- }
- #include<iostream>
- using namespace std;
- int main(){
- int j,n,i,sum;
- cin >> n;
- for(j=1;j<=n;++j){
- int fac=1;
- for(i=1;i<=j;++i){
- fac=fac*i;
- }
- sum = sum +fac;
- }
- cout << sum;
- return 0;
- }
2.我有特殊的判断方法
题目:检查一个正整数能否被3,5,7整除。这简直是最基础的用来练习if语句的题目了,而且很显然是想让我用模运算符
%
来判断。
然而我第一个想到的并不是用模运算符,而是一种很久之前看到的好像叫循环差的东西,即:
100/3=33.33333333333…………
33.33333333…………*3=99.999999999…………
而在C++里,如果定义为整型,那么就会得到99,而99<100。
其实从数学上来说,99.9999999…………就等于100,这个不再多说。
于是就有了这样的代码:
- #include<iostream>
- using namespace std;
- int main(){
- int n;
- cin >> n;
- if ((n/3)*3==n) cout << "3";
- if ((n/5)*5==n) cout << "5";
- if ((n/7)*7==n) cout << "7";
- return 0;
- }
- #include<iostream>
- using namespace std;
- int main(){
- int n;
- cin >> n;
- if (n%3==0) cout << "3";
- if (n%5==0) cout << "5";
- if (n%7==0) cout << "7";
- return 0;
- }