质因子分解

    xiaoxiao2025-03-17  14

    system(“pause”)

    这个东西会在程序运行结尾提示“Press any key to continue”,用以结束程序。

    百度网友给出建议: 不要用system(“pause”)来暂停,可以改用std::cin.get或getchar() 为何不要用system(“pause”)? 有两个理由 A,不具可移植性 B, 这东西很贵

    贵在那里?让我们来看看system(“pause”)的流程 1 : 暂停你的程式 2 : 在sub-process中启动OS 3 : 寻找要执行的命令并为之分配记忆体 4 : 等待输入 5 : 回收记忆体 6 : 结束OS 7 : 继续你的程式

    算了,我还是继续用我比较顺手的getchar()吧!

    ? ? ? 如递归所有控件路径,函数将导致运行时堆栈溢出???

    题目:输入一个整数,分解质因子:

    个人初级版:

    # include<stdio.h> int check(int i,int k) { if(i % k == 0) { if(i / k == 1) { return k; }else{ printf("%d * ",k); return check(i/k,k); } }else{ return check(i,k+1); } } void main() { int i = 0,k = 2; printf("请输入一个正整数:\n"); scanf("%d",&i); getchar(); printf("%d = ",i); printf("%d",check(i,k)); getchar(); } 当函数有返回值时,所有的路径都需要有返回。

    网友版:

    #include <stdio.h> void breakUp_primeNub(int number) { int i = 0,j = 0,k = 0; for (i = 2; i <= number; i++) { if (number % i == 0) { j = number / i; if (j == 1) { printf("%d",i); return ; } else { printf("%d * ",i); breakUp_primeNub(j); break; } } } } int main() { int i = 0; printf("请任意输入一位正整数: "); scanf("%d",&i); breakUp_primeNub(i); getchar(); }

    非递归做法

    #include<stdio.h> int main() { int n,i; printf("请输入整数:"); scanf("%d",&n); getchar(); printf("%d=",n); for(i=2;i<=n;i++) { while(n%i==0) { printf("%d",i); n/=i; if(n!=1) printf("*"); } } getchar(); return 0; }

    个人究极版

    #include<stdio.h> int main() { int n,i = 2; printf("请输入整数:"); scanf("%d",&n); printf("%d=",n); for(i=2;i<=n;i++) { while(n%i==0) { printf("%d*",i); n/=i; } } putchar('\b'); system("pause"); return 0; }

    真的是这样吗?

    不知道为何在上常看见有人宣告”void main” 这东西不是C++的標準進入點 标准只支援两种宣告 第一种”int main” 第二种”int main(int argc, char *argv[])” 宣告”void main”可能会有非预期的结果 这点不只适用于C++,C也一样管用 这是教科书的错?或者是教授们的错?

    两个数的最小公倍数 = 两数之积 /两数的最大公约数

    如果一个三位数等于它的个十百位三个数的立方和,那么该数是水仙花数。

    一个数如果恰好等于它的因子之和,这个数就称为”完数”。

    回文数,即对称数,如:12321。

    - - - - - - - - - 代码的魅力之一:差之毫厘,谬以千里。

    题目找出1000以内的完数:

    错误代码:

    #include<stdio.h> void main() { int i,j; for(i=2;i<=1000;i++) { int sum = 1; //sum在里面定义运行结果正确 for(j=2;j<i;j++) { if(i%j==0) sum += j; } if(i == sum) printf("%d ",i); } getchar(); }

    正确代码:

    #include<stdio.h> void main() { int i,j,sum = 1; //sum在外面定义运行结果错误 for(i=2;i<=1000;i++) { for(j=2;j<i;j++) { if(i%j==0) sum += j; } if(i == sum) printf("%d ",i); } getchar(); }

    区别于以往的累加动作,此题只有在进入第二层循环体时才需要进行累加,并且需要保证每次进入时的初值都一样。所以每进去第一层循环时sum都有一个复位的动作,所以必须在里面定义。

    转载请注明原文地址: https://ju.6miu.com/read-1297132.html
    最新回复(0)