| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 720 人关注过本帖
标题:请问一题
只看楼主 加入收藏
笨笨女孩
Rank: 1
来 自:江苏
等 级:新手上路
帖 子:5
专家分:0
注 册:2010-10-14
结帖率:0
收藏
已结贴  问题点数:20 回复次数:12 
请问一题
从键盘输入的一个数字串中依次由第1个数字、第2个数字、第3个数字.....开始向后截取1位数、2位数.....,找出其中的素数。例如:输入236759,可截取得到素数:2,23,3,367,67,7,5,59  怎么做???(最好不用数组,最好用函数写)我提供个函数
int prime(int a)
{

    int i,f;
    f=1;
    if(a==1)//1不是素数
        return 0;
    for(i=2;i<=sqrt(a);i++)
    if(a%i==0)
    f=0;
    return f;
}


[ 本帖最后由 笨笨女孩 于 2010-10-17 14:15 编辑 ]
搜索更多相关主题的帖子: 键盘 return 最好 
2010-10-16 14:48
m21wo
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:4
帖 子:440
专家分:1905
注 册:2010-9-23
收藏
得分:2 
程序代码:
#include <iostream>
#include <string>
using namespace std;
int prime(int  num)
{
    int flag=1,n;
    for(n=2;n<num/2 &&flag == 1;n++)
        if (num%n==0)
            flag=0;
    return flag;
}

int main()
{
    string s,temp;
    cout<<"请输入字符串:"<<endl;
    cin>>s;
    int n=s.size();
    cout<<"字符串中的素数为:"<<endl;
    for(int i=0;i<n;i++)
    {
        for(int j=1;j<=n-i;j++)
        {
            temp=s.substr(i,j) ;    //放回s中从小标i开始的j长度的字符组成的子字符串
            int d=atoi(temp.c_str());   // 将字符串转化为对应的整数!
            if( prime(d))
                cout<<d<<endl;
        }
    }
}

看楼主满意吗?呵呵!结果是正确的!

If You Want Something, Go Get It, Period.
2010-10-16 15:38
gmac
Rank: 2
等 级:论坛游民
帖 子:174
专家分:85
注 册:2010-9-28
收藏
得分:2 
回复 2楼 m21wo
能用C做一下?
2010-10-16 16:01
m21wo
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:4
帖 子:440
专家分:1905
注 册:2010-9-23
收藏
得分:0 
回复 3楼 gmac
C与C++很近!改改就ok 了啊

If You Want Something, Go Get It, Period.
2010-10-16 16:10
gmac
Rank: 2
等 级:论坛游民
帖 子:174
专家分:85
注 册:2010-9-28
收藏
得分:0 
回复 4楼 m21wo
我用C做不出来
你弄下贴出来看看嘛
2010-10-16 16:28
system3288
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:79
专家分:140
注 册:2010-10-9
收藏
得分:2 
我连看都没看懂,好深奥呀
2010-10-16 17:39
pangge
Rank: 2
等 级:论坛游民
帖 子:27
专家分:32
注 册:2010-8-30
收藏
得分:2 
把二楼的程序稍微改了一下,用了二楼的函数和主函数主体,不过改动的大家都应该能看懂的境地了吧!
#include <iostream>
using namespace std;
int prime(int  num)
{
    int flag=1,n;
    for(n=2;n<num/2 &&flag == 1;n++)
        if (num%n==0)
            flag=0;
    return flag;
}
int main()
{
    char s[100]={'0'},temp[100]={'\0'};
    int n,k=0,m=0;
    cout<<"请输入字符串:"<<endl;
    gets(s);
    while('0'<=s[k++]&&s[k++]<='9')
    {}
    n=--k;                           //计算s字符串的大小
    cout<<"字符串中的素数为:"<<endl;
    for(int i=0;i<n;i++)
    {
        for(int j=i;j<n;j++)
        {
            temp[m++]=s[j];            //把s中的元素依次放入temp数组中
            temp[m]='\0';              //注意为temp数组末尾加'\0'(字符串结尾符)以便得到正确的d值
            int d=atoi(temp);        //将字符串转化为对应的整数!
            if( prime(d))
            {
                cout<<d<<endl;
            }
        }
        m=0;
    }
    return 0;
}
输入输出都用c++的方法,不过不影响理解哦
2010-10-16 19:24
pangge
Rank: 2
等 级:论坛游民
帖 子:27
专家分:32
注 册:2010-8-30
收藏
得分:0 
悲剧了,突然发现二楼的这个高手的判素数的函数不能判断4!!!!郁闷,有时间改写下先
2010-10-16 19:36
m21wo
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:4
帖 子:440
专家分:1905
注 册:2010-9-23
收藏
得分:0 
程序代码:
int prime(int  num)
{
    int flag=1,n;
    for(n=2;n<=num/2 &&flag == 1;n++)
        if (num%n==0)
            flag=0;
    return flag;
}

是啊!少了一个等号啊!没注意!呵呵!

If You Want Something, Go Get It, Period.
2010-10-16 20:40
自由战士89
Rank: 5Rank: 5
等 级:职业侠客
帖 子:154
专家分:387
注 册:2010-9-2
收藏
得分:2 
/*自己都觉的太繁琐了,效率也低,唉。
大致是这样的:比如输入236759,先判断236759、再23675、再2367、再236...再2。(第一次大循环结束),然后判断36759、再3675...再3。
(第二),然后6759...
输出的顺序也不一样,23  2  367  3  67  7  59  5  */
#include<stdio.h>
#include<math.h>
void main()
{
    int n,m;            
    int i,j,num=1;   
    scanf("%d",&n);        //输入一个整数n,从n中截取
    m=n;
    do
    {
        m/=10;
        num++;           //num等于n是几位数
        
    }while(m>10);
     do               
    {
        int t=1;
        m=n;
      for(i=num;i>0;i--)     
        t*=10;
        num--;   //下次循环改变t,进而改变m,
        m%=t;      //大循环控制m,每循环一次m等于从n的下一位开始

         do       //再次控制m,
        {
          for(j=2;j<sqrt(m)+1;j++)   //判断索数
          {
              if(m%j==0)
              {
                  if(m==2)             //对m=2判断
                      printf("%d ",m);
                  break;
              }
              if(j>=sqrt(m))
              printf("%d ",m);
          }
         if(m<10)        //内循环结束条件
              break;
          m/=10;         //
         
        }while(1);
    }while(m!=n%10);   //外循环,m等于n的个位数时结束
}
2010-10-17 11:12
快速回复:请问一题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.028845 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved