c语言怎么求当前电脑能表示的最大整型数?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言怎么求当前电脑能表示的最大整型数?相关的知识,希望对你有一定的参考价值。
我们老师要求,找出最大的n,使得第n个Fibonacci数不超过计算机所能表示的最大整数,并给出具体的执行时间。我不知道怎么表示数字已超过计算机所能表示的最大整数,怎么求具体的执行时间呢?求高手指点一二
C++最大的整数类型是unsigned long long你输出sizeof(unsigned long long),就知道unsigned long long有多少位了,那你就知道有多大了吧
执行时间
用time.h里的计时函数,程序开始之前记录一次时间,结束的时候记录一次时间,两次相减不就是你的函数的执行时间吗?追问
c语言中呢
追答time.h c语言也能用
unsigned long long貌似c语言也支持,你试试,我现在的电脑没有c编译器
我在VC中运行的,说 long 后面接long是错的,显示‘error C2632: 'long' followed by 'long' is illegal’
追答那就unsigned long是最大了
关于计时请参看:
http://msdn.microsoft.com/en-us/library/4e2ess30(v=vs.71).aspx
参考资料:http://msdn.microsoft.com/en-us/library/4e2ess30(v=vs.71).aspx
追问#include
long Fn(int n);
void main()
int i;
int m=sizeof(unsigned long);
for(i=1;;i++)
if(Fn(i)>=m)
printf("最大的n是%d,第%d个Fibonacci数不超过计算机所能表示的最大整数",i,i);
long Fn(int n)
if(n==1)
return 0;
else if(n==2)
return 1;
else return Fn(n-1)+Fn(n-2);
这个代码把所有的n的情况都输出了,连n=1时是都输出了。。。。看看问题所在
LaceTao说的是C++的库
#include
#include
#include
#include
unsigned long Fn(int n);
int _fnlen = 100;
unsigned long *_fn;
void main()
int i;
unsigned long m=~0; // 其实想让你先看一下sizeof(unsigned long)是多少,比方说是4,那么这里直接写:unsigned long m=0xffffffff,就是8个f
_fn = new unsigned long[_fnlen];
clock_t start = clock();
for(i=1;;i++)
if(Fn(i + 1)<=Fn(i))
printf("最大的n是%d,第%d个Fibonacci数不超过计算机所能表示的最大整数",i,i);
printf("执行时间:%d", clock() - start);
break;
delete _fn;
long Fn(int n)
if (_fnlen <= n)
unsigned long *pl = new unsigned long[_fnlen * 2];
memset(*pl, sizeof(unsigned long) * _fnlen * 2, 0);
memcpy(pl, _fn, sizeof(unsigned long) * _fnlen);
_fnlen *= 2;
delete _fn;
_fn = pl;
if (_fn[n]) return _fn[n];
if(n==1)
_fn[n] = 0;
else if(n==2)
_fn[n] = 1;
else _fn[n] = Fn(n-1)+Fn(n-2);
return _fn[n];
我这没有c编译器,不敢保证一点没错,但思路没问题,你自己编译调试一下
这个有一个宏标识了各种类型的最大值和最小值,楼主可以看看这个limit文件,一般来说根据操作系统来的,32位的和16位或者64位的int型肯定不一样的,看这个limit.h文件就可以了知道了。追问
怎么用?具体怎么求最大整数?
参考技术B 应该看编译器支持的最大类型是多少在VC里
unsigned long long 和 unsigned long都是4个字节
可用下边这个求出这个最大数
unsigned long long max = ~0; 参考技术C 难道你要的是这个?
unsigned long long max_num = (unsigned long long) -1; 参考技术D 我想说,你是不是民大的呀
大整数求和
大整数求和
摘要:对于一些大整数,如果超出电脑整型数所能表示的最大范围,应该怎么计算加法呢?我们可以利用字符串进行求和,具体代码如下:
1 #include<iostream> 2 #include<string> 3 using namespace std; 4 string Add(string &str1, string &str2); 5 int main() 6 { 7 string str1, str2; 8 cin >> str1 >> str2; 9 cout << Add(str1, str2) << endl; 10 } 11 12 string Add(string & str1, string & str2) 13 { 14 int flag = 0; // 进位标记 15 int i = 0; // 位数 16 int n = str1.size(); 17 int m = str2.size(); 18 // 整数是从最低位开始相加,所以先将字符串反序 19 reverse(str1.begin(), str1.end()); 20 reverse(str2.begin(), str2.end()); 21 string res = "";// 存放结果的串 22 while (i < n && i < m) 23 { 24 res+=(((str1[i] - \'0\') + (str2[i] - \'0\') + flag) % 10 + \'0\');// 计算第i位的值 25 flag = ((str1[i] - \'0\') + (str2[i] - \'0\') + flag) / 10; // 计算第i位的进位 26 i++; 27 } 28 // 如果str1表示的整数位数更多,计算大整数str1余下的部分 29 while (i < n) 30 { 31 res+= (((str1[i] - \'0\') + flag) % 10 + \'0\');// 计算第i位的值 32 flag = ((str1[i] - \'0\') + flag) / 10; // 计算第i位的进位 33 i++; 34 } 35 // 如果str2表示的整数位数更多,计算大整数str2余下的部分 36 while (i < m) 37 { 38 res+= (((str2[i] - \'0\') + flag) % 10 + \'0\');// 计算第i位的值 39 flag = ((str2[i] - \'0\') + flag) / 10; // 计算第i位的进位 40 i++; 41 } 42 // 最高位是否有进位,设置最高位的值44 if (flag == 1) 45 res+= \'1\'; 46 // 反序结果串,结果即为所求 47 reverse(res.begin(), res.end()); 48 return res; 49 }
运行结果如下:
以上是关于c语言怎么求当前电脑能表示的最大整型数?的主要内容,如果未能解决你的问题,请参考以下文章