| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 441 人关注过本帖, 1 人收藏
标题:c语言入门练习1
只看楼主 加入收藏
傻了么这是
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2015-3-29
结帖率:100%
收藏(1)
已结贴  问题点数:2 回复次数:7 
c语言入门练习1
编程:输入n,输出n的所有质数因子(如n=13860,则输出2、2、3、3、5、7、11)。
#include <stdio.h>
#include <math.h>
int main()
{
  int a,b,c,d;
  printf("请输入一个整数:\n");
  scanf("%d",&a);
  d=a;
  for(b=2;b<sqrt((float)d); )
  {
    if(a%b==0)
    {
       printf("%d\n",b);
       a/=b;
       continue;/*继续if后的条件判断及语句*/
    }
    b++;
  }
}                            求教:    其中(float)d是什么意思?括号可以去掉吗?   该题还有没有别的解法?
搜索更多相关主题的帖子: c语言入门 include 
2015-03-30 19:48
longwu9t
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:6
帖 子:732
专家分:2468
注 册:2014-10-9
收藏
得分:2 
程序代码:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

typedef unsigned long long ULL;

int main(void) {
    ULL *num = NULL, n, i, j, k, l, t;
    puts("请输入一个整数:");

    if((scanf("%lld", &n)) != 1 || n < 2) return 1;

    l = n - 1;

    if(!(num = malloc(l * sizeof(ULL)))) return 1;

    for(k = 0; k < l; k++) num[k] = k + 2;

    for(i = 0; i < l; i++) {
        if(num[i])
            for(t = sqrt(num[i]), j = 2; j <= t; j++)
                if(num[i] && num[i] % j == 0)
                    for(k = 0; i + j * k < l; k++)
                        num[i + j * k] = 0;
    }

    puts("所有质数因子:");

    for(i = 0; i < l; i++) {
        if(num[i]) {
            while((n % num[i]) == 0) {
                printf("%llu ", num[i]);
                n /= num[i];
            }
        }
    }

    puts("");
    free(num);
    return 0;
}

Only the Code Tells the Truth             K.I.S.S
2015-03-30 20:23
傻了么这是
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2015-3-29
收藏
得分:0 
待我细细研究一下再请教您      现在有点晕!
2015-03-30 20:36
傻了么这是
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2015-3-29
收藏
得分:0 
回复 2楼 longwu9t
有报错:
error C2632: 'long' followed by 'long' is illegal

error C2440: '=' : cannot convert from 'void *' to 'unsigned long *'
        Conversion from 'void*' to pointer to non-'void' requires an explicit cast

warning C4244: '=' : conversion from 'double' to 'unsigned long', possible loss of data
执行 cl.exe 时出错.
2015-03-30 20:42
longwu9t
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:6
帖 子:732
专家分:2468
注 册:2014-10-9
收藏
得分:0 
回复 4楼 傻了么这是
图片附件: 游客没有浏览图片的权限,请 登录注册

我用VS2013带的cl编译是没问题
不知道你的vs版本

Only the Code Tells the Truth             K.I.S.S
2015-03-30 20:44
傻了么这是
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2015-3-29
收藏
得分:0 
回复 5楼 longwu9t
我用的Vc++
2015-03-30 20:47
傻了么这是
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2015-3-29
收藏
得分:0 
回复 2楼 longwu9t
原来程序中的(float)d是什么意思?括号可以去掉吗?
2015-03-30 20:51
longwu9t
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:6
帖 子:732
专家分:2468
注 册:2014-10-9
收藏
得分:0 
回复 7楼 傻了么这是
看一个程序有没有错是件痛苦的事
与其这样
我宁愿再写一遍

sqrt, sqrtf, sqrtl functions
Purpose:
Computes the square root.
Syntax:
float sqrtf(float x);
double sqrt(double x);
long double sqrtl(long double x);
Declared in:
<math.h>
Description:
The function computes the square root of x.
Returns:
The square root of x.

sqrt(x)函数实际是会自动把x提升到double类型
而且sqrt(x)的返回值是double类型
所以我觉着(float)这个强制类型转换没有必要加

Only the Code Tells the Truth             K.I.S.S
2015-03-30 21:00
快速回复:c语言入门练习1
数据加载中...
 
   



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

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