c语言怎么求当前电脑能表示的最大整型数?

c语言怎么求当前电脑能表示的最大整型数?,第1张

C++最大的整数类型是unsigned long long
你输出sizeof(unsigned long long),就知道unsigned long long有多少位了,那你就知道有多大了吧
执行时间
用timeh里的计时函数,程序开始之前记录一次时间,结束的时候记录一次时间,两次相减不就是你的函数的执行时间吗?

#include<stdioh>
#include<stringh>
#define N 1005
int main()
{
char str1[N],str2[N];
int num1[N],num2[N],t,len1,len2,i,j,max;
scanf("%d",&t);//测试t组数据,减法就不写了
getchar();
while(t--)
{
memset(str1,0,sizeof(str1));
memset(str1,0,sizeof(str2));
memset(num1,0,sizeof(num1));
memset(num2,0,sizeof(num2));
scanf("%s",str1);//输入第一个数,这个1000位整数相加也没问题,上面自己改长度
scanf("%s",str2);//输入第二个数,因为没有太长的数据类型,用字符串表示大整数
len1=strlen(str1);
len2=strlen(str2);
max=len1>len2len1:len2;
j=0;
for(i=len1-1; i>=0; i--) //这里注意啊,倒着转换,但是num1是正向存每一位的
{
num1[j]=str1[i]-'0'; //转换成数字一个一个存到数组里面
j++;
}
j=0;
for(i=len2-1; i>=0; i--)
{
num2[j]=str2[i]-'0';
j++;
}
for(i=0; i<max; i++) //一位一位相加
{
num2[i]+=num1[i]; //加到num2数组中
if(num2[i]>=10) //大于10进位
{
num2[i]-=10;
num2[i+1]+=1;
}
}
if(num2[max]==1)
printf("%d",num2[max]);
for(i=max-1; i>=0; i--) //这样就把大整数的每一位算出来了,顺序输出就好
printf("%d",num2[i]);
printf("\n");
}
return 0;
}

此程序可通过以下步骤实现:

1、输入一个正整数

2、将整数转换为字符串(使用sprintf函数)

3、求字符串的长度(strlen函数),即正整数的位数

代码如下:

#include <stdioh>
#include <stringh>
int main()
{
long num;
char str[20];

scanf("%ld", &num);
sprintf(str, "%ld", num);
printf("%d", strlen(str));

return 0;
}

这样写主要是考虑到整数的前面可能有0,比如:00090,是两位数。如果确认没有前置0的话,可以简化过程,省去转换为字符串的过程,直接用gets得到字符串。

这个是可以实现大整数加法的程序:
#include<stdioh>
#include<mathh>
#include<stringh>
void main()
{
char str1[500]="0",str2[500]="0",str3[500]="0",p,q,r;
int s,d,j=0;
printf("请输入两个大整数:\n");
gets(str1);
gets(str2);
p=str1+strlen(str1)-1;
q=str2+strlen(str2)-1;
r=str3+strlen(str2);
if(strlen(str1)>strlen(str2))
r=str3+strlen(str1);
for(;p>=str1&&q>=str2;p--,q--,r--)
{
d=0;s=p+q-'0';
if((p+1)+(q+1)+j-'0'>'9')
d=1;
j=d;
if(p+q+j-'0'>'9')
{
s=p+q-'9'-1;
}

r=d+s;
}
if((p+1)+(q+1)-'0'>'9')
r+=1;
if(p>=str1)
{
for(;p>=str1;r--,p--)
{
if(r+p>'9')
r=-9,(r-1)+=1;
r+=p;
}
}
if(q>=str2)
{
for(;q>=str2;r--,q--)
{
if(r+q>'9')
r=-9,(r-1)+=1;
r+=q;
}
}
while(r=='0')
r++;
printf("结果为:");
while(r!='\0')
printf("%c",(r++));
printf("\n");
}

1、ANSI C99标准中并没有64位整数类型。但是,许多实际的编译器,都实现了对64位整数类型的支持。因为没有这方面的标准,所以具体的语法描述方式略有不同,一般Windows平台,用__int64的关键字,而Linux平台则使用long long的描述方法。

2、有人做了测试,如下图所示:

综合上图可以得出如下几点:

a:long long定义方式可以用于gcc/g++,不受平台限制,但不能用于VC60。

b:__int64是Win32平台编译器64位长整型的定义方式,不能用于Linux。

c:“%lld”用于Linux i386平台编译器,”%I64d”用于Win32平台编译器。

d:cout只能用于C++编译,在VC60中,cout不支持64位长整型。

3、如果要使用64位的整数,尽量使用最新的编译器,Windows平台,尽量使用VS的较新版本,Linux平台,建议将gcc/g++升级到最新版本。

int类型不能通过标准C来定义。你只能指定a是signed interger,但你肯定不能通过C语句确保它是32-bit的。你应该找一个合适的,把int类型值设置为32位的编译器,例如VC++6
那么在这样的编译器中,你可以用这样的语句:
signed int a;
如果你使用的是VC++6或者其他的让int类型占32位的编译器,你的a就会是32-bit signed integer的。
不过,如果你是在做试题,我想signed int a;或者简单的signed int a;就是你要的标准答案。因为老师不一定总是对的嘛:)


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/10336053.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-07
下一篇 2023-05-07

发表评论

登录后才能评论

评论列表(0条)

保存