搜索
查看: 1579|回复: 15
打印 上一主题 下一主题

自己坐电脑前11小时了,没想明白,只好来请教了

[复制链接]
跳转到指定楼层
楼主
发表于 2014-7-12 13:30:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
5啊哈币
算1到123456之间所有7的倍数的和。
#include <stdio.h>
#include <stdlib.h>
int main()
{
    long int  b=0,i;     //是不是这个类型定错了?如错了要换成什么?
        for(i=1;123456>i;i++)
{
        if (i%7==0)
        {
        b=b+i;
        printf("7的倍数有               %ld\n",i);
        printf("是7的倍数的和是:%ld\n",b);
        }
  }
       
        system("pause");
        return 0;
}

1到123456之间所有尾数是7的数的和
#include <stdio.h>
#include <stdlib.h>
int main()
{
    long int  b=0,i;
        for(i=1;123456>i;i++)
{
        if (i%10==7 )
        {
        b=b+i;
        printf("尾数有7的数是               %ld\n",i);
        printf("尾数有7的数的和是:%ld\n",b);
        }
  }
       
        system("pause");
        return 0;
}


这2题,搞的我真不知那错了,我开始有的知识,我确定我记住了,现在所有的知识我都不确定了,看书,看了4.5个小时,A4纸打萛稿,都有8张了。。。还是没找到问题。最怀疑的是那个类型定错了,long类型放不了这么大的数字?如果是,以我现在学的,好像解决不了了,我到今天,还只自学了11天。请各位老师指点下,感谢了,我先睡会,20个小时没睡了。

最佳答案

查看完整内容

你真的试图去理解了吗? 举个例子 77是7的倍数,第一次跑的时候会被加进去 77尾数也是7,第二次跑的时候也会被加进去 那么77就加了两遍,所以不对
沙发
发表于 2014-7-12 13:30:13 | 只看该作者
aqzma 发表于 2014-7-12 22:57
不好意思,人比较笨,也没多少文化。理解能力没那么好。您看7楼的代码,我觉的和我一样呀,只不过,他简 ...

你真的试图去理解了吗?

举个例子
77是7的倍数,第一次跑的时候会被加进去
77尾数也是7,第二次跑的时候也会被加进去

那么77就加了两遍,所以不对
板凳
发表于 2014-7-12 14:02:23 | 只看该作者
有些数字是7的倍数,同时尾数是7
你加了两遍
地板
发表于 2014-7-12 15:28:33 | 只看该作者
本帖最后由 schein 于 2014-7-12 15:31 编辑

i 的数据类型是对的,
但是在123456个数字中7的倍数有很多个,超出了int的界限,所以
你的程序中的b 的类型要设置成  double;

for循环的条件写错了,应该是for(i=1;i<=123456;i++)
最后一个printf应该放到 for 循环的外面。

以下是程序代码,希望能帮到你。

#include <stdio.h>
#include <stdlib.h>
int main()
{
            int  i,num;
        double b;
        num=0;          b=0;
        printf("以下数字是7的倍数\n");
        for(i=1;i<=123456;i++)
        {
                        if (i%7==0)
                      {
                                printf("%d、",i);
                                b=b+i;
                                num++;
              }
    }
   
    printf("共有%d个7的倍数,它们的和是%.2lf\n",num,b);
        system("pause");
        return 0;
}


5#
 楼主| 发表于 2014-7-12 19:50:40 | 只看该作者
schein 发表于 2014-7-12 15:28
i 的数据类型是对的,
但是在123456个数字中7的倍数有很多个,超出了int的界限,所以
你的程序中的b 的类 ...

那再请问下,i<123456 难道不是和 123456>i 一样的吗?至于那个 = ,在这题中,要不要都一样吧,因为1不可能是7的倍数呀。还有那最后一个printf放在那里,都不会影响程序的结果吧?我放那,主要是为了,对它输出结果做对比
6#
 楼主| 发表于 2014-7-12 20:03:13 | 只看该作者
rosynirvana 发表于 2014-7-12 14:02
有些数字是7的倍数,同时尾数是7
你加了两遍

那您的意思是 if==0 这个表达式是不能准确算出7的倍数吗?
7#
 楼主| 发表于 2014-7-12 20:04:59 | 只看该作者
schein 发表于 2014-7-12 15:28
i 的数据类型是对的,
但是在123456个数字中7的倍数有很多个,超出了int的界限,所以
你的程序中的b 的类 ...

您这个程序和我那个程序,运行的结果是一样哦。。。
8#
发表于 2014-7-12 21:03:10 | 只看该作者
你这是挑战题第3题吗?请看我的代码:[mw_shl_code=c,true]#include <stdio.h>
int main()
{
        unsigned long int i,sum=0;
    for(i=7;i<123456;i++)
       if(i%7==0||i%10==7)
          sum+=i;
    printf("sum=%d",sum);
        sleep(500000);
        return 0;
}[/mw_shl_code]
9#
发表于 2014-7-12 22:10:55 | 只看该作者
aqzma 发表于 2014-7-12 20:03
那您的意思是 if==0 这个表达式是不能准确算出7的倍数吗?

你试试再读读我那句话,我觉得说得很清楚了
10#
 楼主| 发表于 2014-7-12 22:53:47 | 只看该作者
xchief 发表于 2014-7-12 21:03
你这是挑战题第3题吗?请看我的代码:[mw_shl_code=c,true]#include
int main()
{

您的代码,我看明白了。你的答案也是对的。可主要是我还是不知道,我的代码那有问题,unsigned long int  就在这个上面?
11#
 楼主| 发表于 2014-7-12 22:57:22 | 只看该作者
rosynirvana 发表于 2014-7-12 22:10
你试试再读读我那句话,我觉得说得很清楚了

不好意思,人比较笨,也没多少文化。理解能力没那么好。您看7楼的代码,我觉的和我一样呀,只不过,他简化了,可他的是对的呀。
12#
发表于 2014-7-13 10:30:57 | 只看该作者
aqzma 发表于 2014-7-12 19:50
那再请问下,ii 一样的吗?至于那个 = ,在这题中,要不要都一样吧,因为1不可能是7的倍数呀。还有那最后 ...

i<123456 和 123456>i  在数学上的意义可以理解为是一样的,但是这样的写法是 for语句的语法。
for(i=0;i<=123456;i++)的意思是,i 从1开始一直到123456,每一步的步长是1。
  i<123456和i<=123456当然是不一样的,前者i只是算到123455。

最后一个printf(),你放在那里是不会影响最后的结果的,就是会输出很多个结果。
13#
发表于 2014-7-13 10:42:02 | 只看该作者
1到123456之间所有7的倍数的和
14#
 楼主| 发表于 2014-7-16 08:46:46 | 只看该作者
rosynirvana 发表于 2014-7-13 20:58
你真的试图去理解了吗?

举个例子

感谢了,我明白你的意思了,可我不明白为什么7楼的那个程序就对了,他那个不就是我那2个程序,合2为1的结果吗?
15#
发表于 2014-7-16 09:05:13 | 只看该作者
aqzma 发表于 2014-7-16 08:46
感谢了,我明白你的意思了,可我不明白为什么7楼的那个程序就对了,他那个不就是我那2个程序,合2为1的结 ...

从1-123456扫一遍,每个数字只进行一次判断,所以不可能出现重复
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

广播台
特别关注
快速回复 返回顶部 返回列表