c语言定义超大数字类型

作者&投稿:柘威 (若有异议请与网页底部的电邮联系)
C语言中允许的最大数是多少?~

1、C语言中最大的整型数据类型是long类型,占4个字节
C中短整型和整型均占2个字节,取值范围是 -32768 ~~~ 32767
长整型占4个字节,取值范围是 -2147483648 ~~~~ 2147483647
如果是无符号数的话,可以表示的数据就是
短整型和 整型: 0--- 65535
长整型: 0---4294967295
在C语言中如果一个数很大的话,超过最大的长整型,可以使用double来存储,这样不会影响运算精度。

2、不同类型的数据范围是不同的:
[signed]int :-32768----32767
unsigned int:0---65535
[signed]short[int]:-32767---32768
long[int]:-2^31----(2^31-1)
unsigned long [int]:0---(2^32-1)
float:10^-37-----10^38
double:10^-307-----10^308
long double:10^-4931----10^4932

这个问题不好答,要看你的编程平台,不同平台的数据类型长度是不同的。如单片机和电脑两个不同的平台。估计不是单片机的话,可以参考一下http://wenku.baidu.com/view/4c19ccbdc77da26925c5b0e4.html。long long 类型就行了。当然数据类型也有局限性,总有个大小范围,如果你要存储或运算的数据大于最大范围,或小于最小范围,你应该用程序分多步运算,就可以了

没有这样的类型,不过大数可以通过大数数组来实现,有专门的数据结构算法。
可以参考如下的乘法实现:
大数乘法:按照32位机器表示法,最多可计算结果为32位以内的数的乘法,否则会溢出;借助字符串转换,可以解决这一问题;#include<stdio.h>
#include<string.h>
#define MAX 100
#define MUX 200
char A[MAX];
char B[MAX];
int reverse(char str[],int len){
char temp;
int i;
for(i=0;i<(len+1)/2;i++){
temp=str[i];
str[i]=str[len-i-1];
str[len-i-1]=temp;
}
return 0;
}
int main(void){
char *ptr;
int increase=0;
ptr=A;
int i=0;
int j=0;
int temp=0;
int add=0;
printf("input the first number:");
scanf("%s",ptr);
ptr=B;
printf("\ninput the second number:");
scanf("%s",ptr);
printf("%s*%s=",A,B);
reverse(A,strlen(A));
reverse(B,strlen(B));
char result[MUX];//array to store the result;
for(i=0;i<MUX-1;i++)
result[i]='0';//initial the array,every bit is 0;
for(i=0;i<strlen(A);i++){
increase=0;
for(j=0;j<strlen(B);j++){
temp=(A[i]-48)*(B[j]-48);
add=(temp+increase+(result[i+j]-48))%10;
increase=(temp+increase+(result[i+j]-48))/10;
result[i+j]=add+48;
if(j==strlen(B)-1&&increase>0)
result[i+j+1]=increase+48;
}//for j

}//for i
int k=0;
char temper;
reverse(result,MUX-1);//attention :MUX-1
int writeflag=0;
printf("\nthe result is:");
for(i=0;i<MUX;i++){
if(result[i]!='0') writeflag=1;
if(writeflag==1)
printf("%c",result[i]);
}
printf("\n");
return 0;
}//return main

c语言定义超大数字类型代码如下:
#include<stdio.h>
#include<string.h>
#define MAX 100
#define MUX 200
char A[MAX];
char B[MAX];
int reverse(char str[],int len){
char temp;
int i;
for(i=0;i<(len+1)/2;i++){
temp=str[i];
str[i]=str[len-i-1];
str[len-i-1]=temp;
}
return 0;
}
int main(void){
char *ptr;
int increase=0;
ptr=A;
int i=0;
int j=0;
int temp=0;
int add=0;
printf("input the first number:");
scanf("%s",ptr);
ptr=B;
printf("\ninput the second number:");
scanf("%s",ptr);
printf("%s*%s=",A,B);
reverse(A,strlen(A));
reverse(B,strlen(B));
char result[MUX];//array to store the result;
for(i=0;i<MUX-1;i++)
result[i]='0';//initial the array,every bit is 0;
for(i=0;i<strlen(A);i++){
increase=0;
for(j=0;j<strlen(B);j++){
temp=(A[i]-48)*(B[j]-48);
add=(temp+increase+(result[i+j]-48))%10;
increase=(temp+increase+(result[i+j]-48))/10;
result[i+j]=add+48;
if(j==strlen(B)-1&&increase>0)
result[i+j+1]=increase+48;
}//for j

}//for i
int k=0;
char temper;
reverse(result,MUX-1);//attention :MUX-1
int writeflag=0;
printf("\nthe result is:");
for(i=0;i<MUX;i++){
if(result[i]!='0') writeflag=1;
if(writeflag==1)
printf("%c",result[i]);
}
printf("\n");
return 0;
}//return main

用不了,无法定义超大类型,只能用字符串来模拟


数字传播的数字传播的定义
有了语言,人类个体的经验才能得以交流,为社会成员所共享;上一代的知识才能传授给下一代,成为子孙万代的精神财富。语言起源于劳动,劳动不仅锻炼双手,也锻炼大脑,同时他也是人类积累经验、发展知识的源泉。经验与知识的积累和发展,任何单个的人是无法完成的,它必须通过无数个个体间的信息的传递与交流...

C语言中,数组和指针定义在内存方面的区别在哪?
2,访问方式:指针是间接访问,首先取得指针的内容作为地址,再去该地址访问数据;数组是直接访问,数组名即是地址 3,指针通常用于动态数据;数组通常用于固定数目和类型的一组数据 4,定义指针变量并不会带来内存分配,要自行分配内存并且将指针变量的内容改写为分配好的地址,通常用内存分配函数如malloc...

c语言题目:若有下列定义:char a;int b;float c;double d;c*=b+...
你好!!!char a;int b;float c;double d;c*=b+d-c这个表达式中含有不同的数据类型,那么编译器就会自动把低级类型向高级类型转换(当然这个转换是自动转换的)即编译器会把char ,int, float 转换成double的类型,c*=b+d-c但是我们定义变量c是float类型的,那么这个计算结果就会强制转换成float...

有关计算机的一些基本概念
为了使计算机能算得快和准、记得多和牢,数十年来,对提高单机中的中央处理器的处理速度和精度,对提高存储器的存取速度和容量作了许多改进,如:增加运算器的基本字长和提高运算器的精度;增加新的数据类型,或对数据进行自定义,使数据带有标志符,用以区别指令和数,及说明数据类型;在 CPU 内增设...

C语言:int a2[10]="123"; 这种定义是非法的吗?为什么?
你定义的数组是int的,单个字符 '1','2','3'是可以表示char里的'1','2','3',也可以被强制转换成int的49,50,51,但"123"是字符串,是不能强制转换成int数字的,还有C语言里单引号是字符,双引号是字符串,双引号的只能表示字符串,"9"是字符串,'9'是字符'9'或数字57 ...

c语言问题
函数在调用时,无需再声明函数得返回类型或者调用类型,所以B,D都错了。可以像A一样调用,更好的是A如果可以写为fun(n,x)就很好了,因为这样调用的参数类型也正确,数据就不会流失。C语言系统有个功能,就是数字类型的转化。会自动将int和double之间转化,就是精确的具体数字流失。

C语言宏定义 PI 3.14159 中3.14159代表的是字符串吗?这些是数字又不是...
不是字符串,C中字符串需要用双引号引起来。

在C语言中,用户定义的标识符的条件有哪些?
C语言中,用户定义的标识符,合法条件:第一:组成标识符的字符必须是英文字母、数字、下划线,不可以是其他字符。第二:标识符必须以以字母或下划线开头(大写小写字母都可以)。第三:标识符区分大小写。第四:标识符不能使用关键字。

C语言的标识符的定义是什么
标示符(identifier)是指用来标识某个实体的一个符号。在不同的应用环境下有不同的含义。在日常生活中,标示符是用来指定某个东西、人,要用到它,他或她的名字;在数学中解方程时,我们也常常用到这样或那样的变量名或函数名;在编程语言中,标识符是用户编程时使用的名字,对于变量、常量、函数、...

C语言的标识符的定义是什么?
在程序中使用的变量名、函数名、标号等统称为标识符。除库函数的函数名由系统定义外,其余都由用户自定义。C 规定,标识符只能是字母(A~Z,a~z)、数字(0~9)、下划线()组成的字符串,并且其第一个字符必须是字母或下划线。在使用标识符时还必须注意以下几点:(1)标准C不限制标识符的长度,但它...

丹巴县17538195812: c语言定义超大数字类型
巴郭小儿: 没有这样的类型,不过大数可以通过大数数组来实现,有专门的数据结构算法. 可以参考如下的乘法实现: 大数乘法:按照32位机器表示法,最多可计算结果为32位以内的数的乘法,否则会溢出;借助字符串转换,可以解决这一问题;#...

丹巴县17538195812: C中定义大数 -
巴郭小儿: C++的64位整数分别叫做__int64与unsigned __int64, 其范围分别是[-2^63, 2^63)与[0,2^64),即9223372036854775808~9223372036854775807与0~18446744073709551615(约1800亿亿). 对64位整数的运算与32位整数基本相同,都支持四则运算与位运算等. 当进行64位与32位的混合运算时,32位整数会被隐式转换成64位整数. 但是,VC的输入输出与__int64的兼容就不是很好了

丹巴县17538195812: 用C语言输出一个很大的数,应该用怎样的标识符类型 -
巴郭小儿: 有没有最大限度,double类型是c语言中存放最大数的类型了,其他类型都没他存的大 得根据具体情况给相应的类型,太大了既没有必要,也浪费空间 希望能帮到你!

丹巴县17538195812: C语言数值超过long的 定义类型还有什么? -
巴郭小儿: long long a;//64位,8字节..scanf("%I64d", &a); printf("%I64d", a);//还有 __int64 类型(下划线也算),范围和 long long 一样,用法也一样..//如果还不能满足您的要求,只能用高精度了..

丹巴县17538195812: c语言编程,怎么处理上千位的大数字啊? -
巴郭小儿: 用所谓的高精度算法.也就是用数组记录和运算. 比如可以将 12345678 这样一个数存在 int add[] 这样一个数组里,另一个数存在另一个数组里.然后按位运算就可以了. 运算过程特别要注意位的对应关系,进位借位,运算结果的位数比原数据多还是少

丹巴县17538195812: c语言中怎样输入一个很大的整数 -
巴郭小儿: 可以利用字符数组来存放整数的各位数值,即将整数当成一串字符来输入. 如果要输入12345678901234567890,则定义一个char型数组a[20],将用户输入的整数当成一串字符存入字符数组a中. 具体实现方法可以参考如下程序段: char a[20]; scanf("%s", a); // 输入12345678901234567890,即可将该整数输入到字符数组a当中 // 则数组a中各元素值为a[0]='1', a[1]='2', a[2]='3', ....... , a[19]='0' // 在进行运算的时候将字符转换为数字即可(即a[i]-'0')

丹巴县17538195812: 在c语言中如果一个数很大超过了long类型的值域该如何定义这个数啊 -
巴郭小儿: 一般是不会超过的 超过了那就用double、float型------------------------------------- 还有另外的一种方法,就是用 字符数组来存储,不过麻烦些.我计算2的10000次方的结果 都是用数组表示的

丹巴县17538195812: 如何用C语言定义一个大数字并用scanf输入 -
巴郭小儿: printf 输出 long long 在windows 环境下 %I64d 在linux 环境下 %lld

丹巴县17538195812: 怎样用C语言打2的1000次方 -
巴郭小儿: 刚刚百度了一下,因为C语言无法定义超大数字,可以用字符串来模拟,这样的话我们可以定义一个整形数组,有若干元素.循环1000次,把计算出的结果保存到数组中,给每个数组元素一个范围,超过范围时就保存到下一个元素中,直到把这1000次搞定,利用字符串方式模拟输出.

丹巴县17538195812: 在C语言中如何输出一个很大很大的数字 -
巴郭小儿: 用数组装呗比如一个数字有1000位 你就可以用a[1000] 把每个数字装到一个位置

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网