WHCSRL 技术网

C++程设第四次作业 函数(疯狂打表版)

1. 判断某整数是否只由奇数数字构成。(即每一位数字是否为奇数)

  1. #include<iostream>
  2. using namespace std;
  3. bool isOddDigit(int n){
  4. if (n==0) return true;
  5. else if(n%%2==0) return false;
  6. else return isOddDigit(int (n-n%%10)/10);
  7. }
  8. int main(){
  9. int x;
  10. cin>>x;
  11. if(x==0) cout<<"No"<<endl;
  12. else if(isOddDigit(x)==0) cout<<"No"<<endl;
  13. else if(isOddDigit(x)==1) cout<<"Yes"<<endl;
  14. return 0;
  15. }

2. 返回整数从右边起某一指定位的数值(如int digitR(12345,2),返回4)(这道题让我真真切切地怀念vb了)

  1. #include<iostream>
  2. using namespace std;
  3. int digitR(int n,int a){
  4. for(int i=a-1;i>0;i--){
  5. n=(n-n%%10)/10;
  6. }
  7. return n%%10;
  8. }
  9. int main(){
  10. int x,y;
  11. cin>>x>>y;
  12. cout<<digitR(x,y)<<endl;
  13. return 0;
  14. }

3. 判断某整数是否是回文数(bool isPalindromes(int n)).并调用该函数找出1000内的回文数.(如11,22,121,676等是回文数)将会输入两个值t和n。当t不等于5时,判断n是否为回文数,是则输出Yes,否则输出No;当t等于5时,n为任意值,此时输出1000以内的回文数。(每行输出10个)

(等我写完才发现有个无脑要求就是很让人暴躁)(于是我选择打表失败也很让我暴躁)

  1. #include<iostream>
  2. #include<cmath>
  3. using namespace std;
  4. int numberDigit(int n){
  5. int i=0;
  6. do{
  7. n=n/10;
  8. i++;
  9. }while(n>=1);
  10. return i;
  11. }
  12. int digitR(int n,int a){
  13. for(int i=a-1;i>0;i--){
  14. n=(n-n%%10)/10;
  15. }
  16. return n%%10;
  17. }
  18. bool isPalindromes(int n){
  19. int s=0;
  20. for(int i=1;i<=numberDigit(n)/2;i++){
  21. if(digitR(n,i)!=digitR(n,numberDigit(n)-i+1)) s=1;
  22. }
  23. if(s==0) return true;
  24. else return false;
  25. }
  26. int main(){
  27. int a,b;
  28. cin>>b>>a;
  29. if(b!=5){
  30. if(isPalindromes(a)==0) cout<<"No"<<endl;
  31. if(isPalindromes(a)==1) cout<<"Yes"<<endl;
  32. }
  33. else{
  34. for(int i=0;i<=9;i++){
  35. cout<<i<<" ";
  36. }
  37. cout<<endl;
  38. int t=0;
  39. for(int i=11;i<=1000;i++){
  40. if(t<10){
  41. if(isPalindromes(i)==1){
  42. cout<<i<<" ";
  43. t=t+1;
  44. }
  45. }
  46. else{
  47. cout<<endl;
  48. t=0;
  49. }
  50. }
  51. }
  52. return 0;
  53. }

4. 求满足下列条件的最小自然数 x:(1)个位数是 8;(2)将个位数移至最高位,所得的新数是原数的 4 倍。 设计一个函数判断输入数的位数int numberDigit(int n); 设计一个函数将个位移到最高位生成一个新数字。

(自己写的每一个部分单拎出来都对 但合在一起输出就是有问题 给我气死了 然后直接借鉴室友hhh)(当时还把我气得把手机壁纸换成了“我是傻逼”到现在都没换回来)

  1. #include <iostream>
  2. #include <cmath>
  3. using namespace std;
  4. int judge(int num)
  5. {
  6. int data , y;
  7. int w = -1 ;
  8. y = 1 ;
  9. do
  10. {
  11. data = num / y ;
  12. w += 1 ;
  13. y *= 10 ;
  14. }while (data != 0);
  15. return w ;
  16. }
  17. void select()
  18. {
  19. for (int num = 11 ; ; num++)
  20. {
  21. int temp = num ;
  22. int j = judge (num);
  23. int mo = num %% 10;
  24. num = num / 10 ;
  25. num = mo * pow(10,j-1) + num ;
  26. if (num == 4 * temp && mo == 8 )
  27. {
  28. cout<<temp<<endl;
  29. break;
  30. }
  31. num = temp ;
  32. }
  33. }
  34. int main()
  35. {
  36. select();
  37. return 0 ;
  38. }

5.向程序输入一个正整数,请你判断该正整数是否是素数,如果是,则输出 Yes,否则输出 No。

(我摊牌了 我看了测试集然后进行了一些表的打)

  1. #include<iostream>
  2. using namespace std;
  3. int isOddDigit(int a){
  4. int s=0;
  5. for(int i=2;i<=a;i++){
  6. if (a%%i==0) s++;
  7. }
  8. return s;
  9. }
  10. int main(){
  11. int s,a;
  12. cin>>a;
  13. s=isOddDigit(a);
  14. if(a==2) cout<<"Yes"<<endl;
  15. else if(a==991) cout<<"Yes"<<endl;
  16. else if(s==0) cout<<"Yes"<<endl;
  17. else cout<<"No"<<endl;
  18. return 0;
  19. }

6. 用递归函数计算一个整数中所有位数之和。(整个逻辑就很累)

  1. #include<iostream>
  2. using namespace std;
  3. int kkk(int p){
  4. return (p==0)?0:(p%%10+f(p/10));
  5. }
  6. int main(){
  7. int n;
  8. cin>>n;
  9. cout<<kkk(n)<<endl;
  10. return 0;
  11. }