求助:程序编写正确,编译通过。但是输出值错误
c语言吧
全部回复
仅看楼主
level 9
沙龙º 楼主
1.题目:请问1~123456之间所有7的倍数和末尾含7的数的和是?
2.代码:
#include<stdio.h>
int main(void)
{
______int num,all;
______for(num=1;num<=123456;)
______{
________if(num%7==0)
____________all=all+num;
________else if((num-7)%10==0)
____________all=all+num;
________num++;
______}
______printf("%d\n",all);
______return 0;
}
3.疑问:在电脑上用GCC编译通过,输出524215665,但是手机上是1741821309
我查了一下,正确答案应该是1741821309,求解为什么?
[笑眼]
2013年07月12日 12点07分 1
level 9
沙龙º 楼主
我实在看不出到底那里错了,求大神指点迷津[惊哭]
2013年07月12日 12点07分 2
level 10
num%10==7 不就得了?
2013年07月12日 12点07分 3
加个()也没有影响吧。。
2013年07月12日 12点07分
回复@rxh_danny :你不是(num-7)%10==0吗?
2013年07月12日 12点07分
回复 rxh_danny :。。。。
2013年07月12日 13点07分
你的方法确实好点
2013年07月13日 00点07分
level 11
all没初始化
2013年07月12日 12点07分 4
可是我在手机运行相同的代码可以得到正确的答案
2013年07月12日 13点07分
系统不是自动把它初始化为0么?
2013年07月12日 13点07分
回复 rxh_danny :想多了
2013年07月12日 13点07分
那我等下切到linux试试,谢谢两位咯
2013年07月12日 13点07分
level 10
代码。。爪机无力
2013年07月12日 12点07分 5
这个用的什么软件?
2013年07月14日 14点07分
这个用的什么软件?
2013年07月14日 14点07分
回复 niNNdeXS :c4droid
2013年07月14日 14点07分
回复 @tiger_988 :是中文还是英文?我下的是英文,怎么设置呢?
2013年07月14日 14点07分
level 10
累死
2013年07月12日 12点07分 6
请教下,这款手机软件叫什么啊?能用手机写代码
2013年07月13日 02点07分
回复 大牙小师 :c4driod
2013年07月13日 02点07分
回复 rxh_danny :谢了
2013年07月13日 08点07分
level 10
结果
2013年07月12日 13点07分 7
嗯,我用手机和你结果一样,但是电脑上输出错误的值
2013年07月12日 13点07分
回复 rxh_danny :你玩minecraft?
2013年07月12日 13点07分
回复 rxh_danny :我好像在minecraft吧里见过你
2013年07月12日 13点07分
确实玩minecraft
2013年07月12日 13点07分
level 9
沙龙º 楼主
别只看不回复啊亲,给点意见呗
2013年07月12日 13点07分 8
level 13
未赋值就使用all的值是undefined behavior吧……
2013年07月12日 13点07分 9
不是系统自动赋值为0么?
2013年07月12日 13点07分
回复 rxh_danny :不是的,系统随机赋值。
2013年07月12日 13点07分
@沙龙º 未定义行为就是一切情况都是允许的,包括all的初值是随机值或者0xCCCCCCCC等特定值……
2013年07月12日 13点07分
哦,等下切到linux试试,谢谢了
2013年07月12日 13点07分
level 9
沙龙º 楼主
刚刚在win7下测试了输出正确。但是在ubuntu下还是输出错误,这到底怎么回事啊啊啊![狂汗]
2013年07月12日 13点07分 10
level 11
初始化初始化初始化初始化………………
2013年07月12日 13点07分 11
好的好的好的好的………………
2013年07月12日 13点07分
level 11
初始化……
2013年07月12日 13点07分 12
level 1
#include <stdio.h>
#define MAX 123456
int main()
{
int i,sum=0,temp=0;
for(i=0;i<=MAX/7;i++)
if(i%10!=1)
sum+=i;
sum*=7;
for(i=0;i<(MAX
+3
)/10;i++)
temp+=i;
temp=temp*10+7*i;
sum+=temp;
printf("%d\n",sum);
return 0;
}
2013年07月12日 14点07分 14
level 1
修改了下:
#include <stdio.h>
#define MAX 123456
#define fun(start,end) (start+end)*(end-start+1)>>1
int main()
{int i,sum=0,temp=0;
for(i=0;i<=MAX/7;i++)
if(i%10!=1)
sum+=i;
sum=(sum<<3)-sum;
temp=fun(0,(MAX-7)/10);
temp=temp*10+7*((MAX+3)/10);
sum+=temp;
printf("%d\n",sum);
return 0;
}
2013年07月12日 14点07分 15
你是不是忘记花括号了。。。
2013年07月13日 00点07分
level 7
all未赋初始值的原因,我用电脑在未赋初始值时为882827849,而给all赋值为0后,则为1741821309.至于为什么手机在未赋值情况下结果是对的?这个是因为编译器的不同,有的编译器在使用未赋值变量时给变量一个随机的值,而有的编译器则是自动赋值为零。
2013年07月12日 16点07分 16
嗯,懂了,谢谢
2013年07月13日 00点07分
回复 rxh_danny :我刚才也在vc下试了下,结果和上面的一样
2013年07月13日 03点07分
level 7
刚学C,代码不是很懂。。。但是这个题目,我举个例子:7,77,707,777等等既是7的倍数,且各位为7的数是不是就被算了两次?
2013年07月12日 18点07分 17
个位为7
2013年07月12日 18点07分
@浩瀚丶云天_ 不会的
2013年07月13日 00点07分
不能,因为那个if是两个嵌套的,如果满足第一个就不执行第二个
2013年07月13日 01点07分
回复 tiger_988 :受教了,谢谢~
2013年07月13日 13点07分
level 16
tcc会很友善地帮你初始化为0。。。
2013年07月12日 22点07分 18
tcc是什么
2013年07月13日 03点07分
回复 756546195 :Tiny C Compiler
2013年07月13日 11点07分
level 11
var_init.
2013年07月13日 03点07分 19
level 12
int 的范围多大,你输出的范围多大了?
2013年07月13日 12点07分 20
level 7
为什么要用GCC编译,楼主喜欢把 NUM++ 放在括号里面 是为了降低程序的可读性吗
话说难道没人用visual studio 吗
2013年07月14日 14点07分 21
不好意思,开始有点理解错误,就把他放下边去了。。[汗]
2013年07月14日 14点07分
用gcc编译难道不可以么?[冷]
2013年07月14日 14点07分
1 2 尾页