c语言 当一个数位数超过11位 怎么输入输出

2025-05-18 23:53:26
推荐回答(3个)
回答(1):

c语言中因数据的存储格式限制,不同类型的数据所能精确表示的数据(整数)位数是有限度的,如:

  • int 占4字节,有符号最大数为:2^31-1 = 2147483647 有效数据位最大为10位。 输入输出格式串为%d

  • long 在64位编译系统下,占8字节,有符号最大数为:2^63-1=9223372036854775807    (受机器和开发工具限制) 有效数据位最大为19位。 输入输出格式串为%ld

  • double 占8字节,有效数据位最大为16位。  输入时,采用%lf格式串,输出时,采用%.0f来去掉小数部分的0

如果操作的数据在以上位数范围内,可选择相应的类型进行数据变量定义。

如果想表达任意长度的整数,则只能采用字符串进行数据存储,输入输出按字符串进行处理,格式串为%s。如果需要进行相应的算术运算,则需要自定义函数去完成相应的功能。实现过程就是按四则运算规则,进行相应位的数据计算。详情可查问大数加减法运算资料。

回答(2):

可以用字符数组保存大数,,,不仅大于11行 100~200及更多位都行
大数相加
#include
#include
int Maxlen ;
char a[110] , b[110] ;
int an1[110] , an2[110] ;
int Addition(int maxlen , int an1[] , int an2[] );int main()
{

int i , j ;
scanf("%s" , a) ;
scanf("%s" , b) ; memset( an1 , 0 , sizeof(an1) ) ;
memset( an2 , 0 , sizeof(an2) ) ;

int len1 = strlen(a) ;
int len2 = strlen(b) ;
if(len1 > len2 )
Maxlen = len1 ;
Maxlen = len2 ;
for(j = 0, i = strlen(a)- 1 ; i >= 0 ; i --)
an1[j++] = a[i] - '0'; for(j = 0 , i = len2 - 1 ; i >= 0 ; i --)
an2[j++] = b[i] - '0';

Addition ( Maxlen , an1 , an2 ) ;

for( i = 100 ; i >= 0; i -- )
{
if( an1[i] != 0 )break;

}
for(;i>=0;i--)
printf("%d" ,an1[i]) ;
printf("\n") ;
}
int Addition( int maxlen , int an1[] , int an2[] )//大数相加函数
{
for( int i = 0 ; i < maxlen ; i++ )
{
an1[i] += an2[i] ;

if( an1[i] >= 10 )
{
an1[i] -= 10 ;
an1[i + 1] ++ ;
}

}
return 0;
}

回答(3):

#include
void main()
{
__int64 a,n,N=1;//结果不超过18位的话可以用int64这个是64位的
__int64 sn,an;
printf("请输入a和n\n");
scanf("%I64d%I64d",&a,&n);
printf("a=%I64d,n=%I64d\n",a,n);
sn=an=0;
while(N<=n){
an=an*10+a;
sn=sn+an;
N++;
printf("%I64d %I64d\n",an,sn);
}
printf("sn=%100I64d\n",sn);
}