鱼C论坛

 找回密码
 立即注册
查看: 2703|回复: 10

新写的麻烦看看有什么不足

[复制链接]
发表于 2014-7-15 18:11:23 | 显示全部楼层 |阅读模式
1鱼币
本帖最后由 风之残月 于 2014-11-10 10:18 编辑

#include <stdio.h>
#include <math.h>
void main()
{
        int n,i;
        double m;
        printf("plese input a numble\n");
        scanf("%lf",&m);
        if(m>1,m==(int)m)
        {
                n=sqrt(m);
                for(i=2;i<=n;i++)
               
                        if(0==(int)m%i)
                                break;
                        if(i>n)

                        {
                                printf("The numble is prime\n",m);

                        }
                        else
                        {
                        printf("The numble is not prime\n",m);
                        }
                }
        else
        {
                if(m==1||m==0)
                {
                 printf("The numble is not prime\n",m);        
                }
                else
                {
                        printf("Please start from the new input error\n",m);
                }
        }
        
}


最佳答案

查看完整内容

计算效率是O(N2)
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2014-7-15 18:11:24 | 显示全部楼层
本帖最后由 zhoushilei 于 2014-7-16 13:28 编辑
  1. #include <iostream>
  2. #include <cmath>
  3. #include <vector>
  4. using namespace std;
  5. int main()
  6. {
  7.           int inputNumber,temp,flag;//inputNumber是输入的素数,temp是用来判断素数用的,flag是判断中是不是素数标志
  8.           vector <int> prime;//用来存放素数的向量表
  9.           //从5开始判断到9999的素数
  10.           for(int i=5;i<10000;i+=2)
  11.           {
  12.                    temp=2;
  13.                    flag=0;
  14.                    while(temp<=(int)sqrt(i))
  15.                    {
  16.                              if(i%temp==0)
  17.                              {
  18.                                       flag=1;
  19.                                       break;
  20.                              }
  21.                              temp++;
  22.                     }
  23.                     if(flag==0)
  24.                     prime.push_back(i);
  25.            }
  26.            int isPrime=0;//用来判断是不是素数的标志
  27.            while(true)
  28.            {
  29.                      cout<<"请输入你要判断的数,小于10000!"<<endl;
  30.                      cin>>inputNumber;
  31.                      if(inputNumber<=0||inputNumber>=10000)
  32.                                 cout<<"输入错误,请重新输入!"<<endl;
  33.                      else if(inputNumber==1)
  34.                                 cout<<"既不是素数也不是合数!"<<endl;
  35.                      else if(inputNumber==2||inputNumber==3)
  36.                                 cout<<"是素数!"<<endl;
  37.                      else if(inputNumber==4)
  38.                                 cout<<"是合数!"<<endl;
  39.                      else
  40.                      {
  41.                                //遍历向量表,若其中有,便是素数,否则为合数
  42.                                for(int j=0;j<prime.size();j++)
  43.                                {
  44.                                           //cout<<prime[j]<<endl;
  45.                                           if(inputNumber==prime[j])
  46.                                           {
  47.                                                         isPrime=1;
  48.                                                         break;
  49.                                           }
  50.                                 }
  51.                                //cout<<isPrime<<" "<<endl;
  52.                                if(isPrime==1)
  53.                                            cout<<"是素数!"<<endl;
  54.                                else
  55.                                            cout<<"是合数!"<<endl;
  56.                                isPrime=0;
  57.                       }
  58.            }
  59.            return 0;
  60. }
复制代码



计算效率是O(N2)

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2014-7-15 23:22:37 | 显示全部楼层
我写了一个你看看吧
  1. #include <stdio.h>
  2. #include<math.h>

  3. void close();

  4. int main ()
  5. {
  6.         int n,i;
  7. s:        printf("Please Input a number:");
  8.         if(scanf("%d",&n))
  9.         {
  10.                
  11.                  if(n == 1)
  12.                 {
  13.                         printf("1既不是素数也不是和数!\n");
  14.                         close;
  15.                         goto s;
  16.                 }
  17.                 else if(n == 2)
  18.                 {
  19.                         printf("%d是素数!\n",n);
  20.                         close;
  21.                         goto s;
  22.                 }
  23.                 else if(n%2==0)
  24.                 {
  25.                         printf("%d是和数!\n",n);
  26.                         close;
  27.                         goto s;
  28.                 }
  29.                 else
  30.                 {
  31.                         for(i=3;i<=sqrt
  32.                                 (n);i=i+2)
  33.                         {
  34.                                 if(n%i==0)
  35.                                 {
  36.                                         break;
  37.                                 }
  38.                         }
  39.                         if(i<=sqrt(n))
  40.                         {
  41.                                 printf("%d是和数!\n",n);
  42.                                 close;
  43.                                 goto s;
  44.                         }
  45.                         else
  46.                         {
  47.                                 printf("%d是素数!\n",n);
  48.                                 close;
  49.                                 goto s;
  50.                         }
  51.                 }
  52.         }
  53.         
  54.         return 0;
  55. }
  56. void close()
  57. {
  58.         char ch;
  59.         while((ch = getchar())!='\n');
  60. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2014-7-15 23:23:22 | 显示全部楼层
我这样效率稍微高点
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2014-7-16 08:53:56 | 显示全部楼层
牡丹,我看了你的代码,感觉你很喜欢用goto。可是我感觉尽量不要用这个,当别人看你的代码时,感觉很晕啊跳来跳去。这是我的个人之见。

点评

哦哦 这个个人习惯问题这个也可以不用goto 用while也是可以的 但是 个人感觉goto好理解  详情 回复 发表于 2014-7-16 10:13
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2014-7-16 10:13:06 | 显示全部楼层
流行语 发表于 2014-7-16 08:53
牡丹,我看了你的代码,感觉你很喜欢用goto。可是我感觉尽量不要用这个,当别人看你的代码时,感觉很晕啊跳 ...

哦哦 这个个人习惯问题这个也可以不用goto 用while也是可以的
但是 个人感觉goto好理解
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2014-7-16 10:50:20 | 显示全部楼层
牡丹花下死做鬼 发表于 2014-7-16 10:13
哦哦 这个个人习惯问题这个也可以不用goto 用while也是可以的
但是 个人感觉goto好理解

这个属于个人习惯,不过不建议使用goto.现在程序还小,等以后程序很大时,你就会体会到了。

点评

这个我知道 一般goto我只是用在循环输入而已 其他都不会用 应为循环输入确实是goto好用  详情 回复 发表于 2014-7-16 10:51
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2014-7-16 10:51:32 | 显示全部楼层
流行语 发表于 2014-7-16 10:50
这个属于个人习惯,不过不建议使用goto.现在程序还小,等以后程序很大时,你就会体会到了。

这个我知道 一般goto我只是用在循环输入而已
其他都不会用
应为循环输入确实是goto好用

点评

嗯嗯! 牡丹兄这么早接触编程! 确实前途无量!  详情 回复 发表于 2014-7-16 11:38
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2014-7-16 10:52:46 | 显示全部楼层
牡丹花下死做鬼 发表于 2014-7-16 10:51
这个我知道 一般goto我只是用在循环输入而已
其他都不会用
应为循环输入确实是goto好用

你现在这么早就接触编程,前途无量啊!
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2014-7-16 11:38:48 | 显示全部楼层
牡丹花下死做鬼 发表于 2014-7-16 10:51
这个我知道 一般goto我只是用在循环输入而已
其他都不会用
应为循环输入确实是goto好用

嗯嗯! 牡丹兄这么早接触编程! 确实前途无量!
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2014-7-16 12:36:46 | 显示全部楼层
要想效率高,还是要打表,这种现算的有什么高效率可言。而且不要用goto,尽量用循环,这个goto是C语言里面的禁忌。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-10 14:41

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表