菜鸟问题!输出不对!

#include<iostream>
#include<cstdlib>
using namespace std;
int main()
{
long long a=1,b=1,k=25;
printf("%ld %ld\n",a,b);
while(k--){
printf("%ld ",a+=b);
printf("%ld ",b+=a);
if(!(k%4))printf("\n");
}
system("pause");
return 0;
}
a、b、k的声明可以改成long
有三个问题:1.为什么没有cstdio头文件就能用printf?
2.为什么无论是用 long还是用long long都会溢出?
3.为什么用long long时第一排是“1 0”而不是“1 1”?

这段代码编译运行没问题,3个问题结果如下:
1、我本机编译运行没这个问题,即头文件加上#include<cstdio>后,输出结果都正确(指修正2、3问题后的结果)。其实cstdio和iostream都有printf函数的。。。
2、long是32位整数(部分用linux调整参数编译的情况忽略。。。),计算斐波数列的话,到了30几项的时候就会溢出,应该用long long的。long long是64bit的整数。
3、long long的输出格式应该是%lld~~
附本机运行结果。。。

1 1
2 3
5 8 13 21 34 55 89 144
233 377 610 987 1597 2584 4181 6765
10946 17711 28657 46368 75025 121393 196418 317811
514229 832040 1346269 2178309 3524578 5702887 9227465 14930352
24157817 39088169 63245986 102334155 165580141 267914296 433494437 701408733
1134903170 1836311903 2971215073 4807526976 7778742049 12586269025 20365011074 32951280099
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-01-18
1、iostream里面也有printf
2、可能你的编译器里long long还是32位的。反正我用VC6,是不支持long long类型的。
3、这就不知道怎么回事了?难道是你的编译器不支持在一个声明语句中给多个变量初始化。

你可以把a,b改成double型,输出时用%.0lf
第2个回答  2012-01-18
printf("%d,%d",&a,&b);这句错了(也可以说是对的,否则编译不过,但不是你想要的)。改成printf("%d,%d",a,b);就可以了。 你的目的