鱼C论坛

 找回密码
 立即注册
查看: 2176|回复: 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)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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[j]<<endl;
                                          if(inputNumber==prime[j])
                                          {
                                                        isPrime=1;
                                                        break;
                                          }
                                }
                               //cout<<isPrime<<" "<<endl;
                               if(isPrime==1)
                                           cout<<"是素数!"<<endl;
                               else
                                           cout<<"是合数!"<<endl;
                               isPrime=0;
                      }
           }
           return 0;
}


计算效率是O(N2)

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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');
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-7-15 23:23:22 | 显示全部楼层
我这样效率稍微高点
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

点评

哦哦 这个个人习惯问题这个也可以不用goto 用while也是可以的 但是 个人感觉goto好理解  详情 回复 发表于 2014-7-16 10:13
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

哦哦 这个个人习惯问题这个也可以不用goto 用while也是可以的
但是 个人感觉goto好理解
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

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

点评

这个我知道 一般goto我只是用在循环输入而已 其他都不会用 应为循环输入确实是goto好用  详情 回复 发表于 2014-7-16 10:51
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

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

点评

嗯嗯! 牡丹兄这么早接触编程! 确实前途无量!  详情 回复 发表于 2014-7-16 11:38
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

你现在这么早就接触编程,前途无量啊!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

嗯嗯! 牡丹兄这么早接触编程! 确实前途无量!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-29 00:15

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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