千寻0 发表于 2014-7-15 18:11:23

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

本帖最后由 风之残月 于 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);
                }
      }
      
}


zhoushilei 发表于 2014-7-15 18:11:24

本帖最后由 zhoushilei 于 2014-7-16 13:28 编辑

#include <iostream>
#include <cmath>
#include <vector>
using namespace std;
int main()
{
          int inputNumber,temp,flag;//inputNumber是输入的素数,temp是用来判断素数用的,flag是判断中是不是素数标志
          vector <int> prime;//用来存放素数的向量表
          //从5开始判断到9999的素数
          for(int i=5;i<10000;i+=2)
          {
                   temp=2;
                   flag=0;
                   while(temp<=(int)sqrt(i))
                   {
                           if(i%temp==0)
                           {
                                    flag=1;
                                    break;
                           }
                           temp++;
                  }
                  if(flag==0)
                  prime.push_back(i);
         }
         int isPrime=0;//用来判断是不是素数的标志
         while(true)
         {
                     cout<<"请输入你要判断的数,小于10000!"<<endl;
                     cin>>inputNumber;
                     if(inputNumber<=0||inputNumber>=10000)
                              cout<<"输入错误,请重新输入!"<<endl;
                     else if(inputNumber==1)
                              cout<<"既不是素数也不是合数!"<<endl;
                     else if(inputNumber==2||inputNumber==3)
                              cout<<"是素数!"<<endl;
                     else if(inputNumber==4)
                              cout<<"是合数!"<<endl;
                     else
                     {
                               //遍历向量表,若其中有,便是素数,否则为合数
                               for(int j=0;j<prime.size();j++)
                               {
                                          //cout<<prime<<endl;
                                          if(inputNumber==prime)
                                          {
                                                      isPrime=1;
                                                      break;
                                          }
                              }
                               //cout<<isPrime<<" "<<endl;
                               if(isPrime==1)
                                           cout<<"是素数!"<<endl;
                               else
                                           cout<<"是合数!"<<endl;
                               isPrime=0;
                      }
         }
         return 0;
}


计算效率是O(N2)

牡丹花下死做鬼 发表于 2014-7-15 23:22:37

我写了一个你看看吧
#include <stdio.h>
#include<math.h>

void close();

int main ()
{
      int n,i;
s:      printf("Please Input a number:");
      if(scanf("%d",&n))
      {
               
               if(n == 1)
                {
                        printf("1既不是素数也不是和数!\n");
                        close;
                        goto s;
                }
                else if(n == 2)
                {
                        printf("%d是素数!\n",n);
                        close;
                        goto s;
                }
                else if(n%2==0)
                {
                        printf("%d是和数!\n",n);
                        close;
                        goto s;
                }
                else
                {
                        for(i=3;i<=sqrt
                              (n);i=i+2)
                        {
                              if(n%i==0)
                              {
                                        break;
                              }
                        }
                        if(i<=sqrt(n))
                        {
                              printf("%d是和数!\n",n);
                              close;
                              goto s;
                        }
                        else
                        {
                              printf("%d是素数!\n",n);
                              close;
                              goto s;
                        }
                }
      }
      
      return 0;
}
void close()
{
      char ch;
      while((ch = getchar())!='\n');
}

牡丹花下死做鬼 发表于 2014-7-15 23:23:22

我这样效率稍微高点

流行语 发表于 2014-7-16 08:53:56

牡丹,我看了你的代码,感觉你很喜欢用goto。可是我感觉尽量不要用这个,当别人看你的代码时,感觉很晕啊跳来跳去。这是我的个人之见。

牡丹花下死做鬼 发表于 2014-7-16 10:13:06

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

哦哦 这个个人习惯问题这个也可以不用goto 用while也是可以的
但是 个人感觉goto好理解

流行语 发表于 2014-7-16 10:50:20

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

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

牡丹花下死做鬼 发表于 2014-7-16 10:51:32

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

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

流行语 发表于 2014-7-16 10:52:46

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

你现在这么早就接触编程,前途无量啊!

青玄 发表于 2014-7-16 11:38:48

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

嗯嗯! 牡丹兄这么早接触编程! 确实前途无量!

zhoushilei 发表于 2014-7-16 12:36:46

要想效率高,还是要打表,这种现算的有什么高效率可言。而且不要用goto,尽量用循环,这个goto是C语言里面的禁忌。
页: [1]
查看完整版本: 新写的麻烦看看有什么不足