C小问题,求解

来源:百度知道 编辑:UC知道 时间:2024/05/22 11:53:37
程序如下:
#include <stdio.h>
#include <conio.h>
#define MAX 8
int main(){
int i=100,j=0;
printf("-------------------------------------------\n");
printf("| C E L L | T I M E |\n");
printf("| %d | %d | \n",i,30*j);
while (j<=MAX){
j++;
for(int t=0;t<j;t++){
i*=i;
}
printf("| %d | %d |\n",i,30*j);
}
printf("--------------------------------------------\n");
printf("PRESS ANY KEY TO QUIT...\n");
getch();
return 0;
}

输出结果:
---------------------------------------
|CELL | TIME |
|100 |0 |
|10000 |30 |
|1874919424 | 60 |
....(都是0) |90

说两句,2楼你的思想太教条了,课本上说的类型的字节其实应该理解为最小存储空间。就说int最小为2字节,long最小为4字节,但是类型的存储空间是根据机器而定,编译器不阻止使用更大的存储空间,实施上,对于int。类型,几乎所有的编译器都比要求的大,就是一楼说的4字节。
这道题的问题,就是数据的溢出,4字节的无符号的int最大为4294967295,有符号的会更小。所以这道题就是溢出,不能用整数表示。如果你应邀整数表示,就要自己模拟实现大数乘法的实现,用字符串存储。
上面说的64位的也不能满足楼主的要求。如果能满足,都早说了,估计大家也是清楚,64位也不能解决,才没有说它。楼主初始100,到后面的i*=i;64位都要溢出。 另外没有人再扯,都是把自己学到和认识的东西说出来,你认为64位都可以解决,不知道是否仔细阅读程序了吗?

别扯了,VC++在WIN32中的int 和 long 是一样的,别的平台我不管
(sizeof(int)==sizeof(long))是ture,估计楼主也用的是VC++
那你就用long long 或 __int64 都是64位的
long long 8 none (but equivalent to __int64)
–9,223,372,036,854,775,808 to 9,223,372,036,854,775,807

unsigned long long 8 none (but equivalent to unsigned __int64)
0 to 18,446,744,073,709,551,615

一楼的说错了 int是2字节 long是4字节 范围怎么可能一样
你忘记int的范围了 int 范围是-32768---32767
而 i*=i; 到第二次就超过了它的范围 后面肯定为0么
把i改小点就好了 在把i设置为long

long 跟int是一样长的。你改成double 试试看。。另外100*100太多次显然就超过了int的最大值吧。。。