如果你需要表示的整数超过了机器所能表示的最大范围,那就需要你自己编写转换程序了。
基本思路可以这样做:定义字符串数组,字符串数组可以定义得很长,然后用户输入完后,你可以将输入的字符串转换成数字。而这个过程对用户来说是透明的,用户无需了解你的内部转换机制,他只要在使用中能够得到正确的结果即可。
#include"stdioh"
int main()
{
int a, b;
scanf("%d%d",&a,&b);
if(a>b)
{printf("%d",a);}
else
{printf("%d",b);}
return 0;
}
NODE mulint(NODE p,NODE q)
{
NODE pc,qc,s,t,r;
int i,number,total = 0;
s=(NODE
)malloc(sizeof(NODE)); /建立存放乘积的链表表头/
s->data=-1; /给存放乘积的链表表头赋值-1/
pc=p->next;
r=t=s;
t->next = s;
i=0; / i为进位 /
while(pc->data!=-1){ /不是表头/
qc=q->next;
while(qc->data!=-1){ /不是表头/
if(t->next->data==-1){
total=pc->dataqc->data+i; /对应位的积与前次进位的和/
i=total/HUNTHOU; /求进位/
number=total-iHUNTHOU; /求出需要存入链表链表中的部分的数值/
t=insert_after(t,number); /将部分积存入s指向的链表中/
t->next=s;
}
else{
total=t->next->data+pc->dataqc->data+i;
i=total/HUNTHOU;
number=total-iHUNTHOU;
t->next->data=number;
t=t->next;
}
total = 0;
qc=qc->next; /移动指针/
}
if(i!=0){
t=insert_after(t,i); /处理最后一次进位/
t->next=s; /指向头结点/
}
i = 0;
pc=pc->next; /移动指针/
t=r->next;
r=r->next;
}
return s; /返回指向积的结构指针/
}
精度的实现是需要用字符形数组和整形数组的配合来实现,下面的例子,是一道ACM试题,关于计算高精度的问题,是算a的b次方但如果a是整数的话,后面需要输入 a0空格b回车。可以计算21的5000次方 或者是20的9000次方
#include<stdioh>
#include<mathh>
int qq(int n)
{ int i, sum=1;
for(i=1;i<=n;i++)
sum=10sum;
return(sum);
}
int main()
{
float r;
int n;
while(1)
{
char a[10000];
long int b[10000];
int k,h,m,i,j,z,g,t,q,e;
long int c=0;
if(scanf("%s%d",a,&n)==EOF)break;
for(i=0;a[i];i++)
if(a[i]=='')k=i;
m=i-k-1;
for(i=k;i<k+m;i++)
a[i]=a[i+1];
h=i;
for(i=0;i<h;i++)
b[i]=a[i]-48;
for(i=0;i<h;i++)c=c10+b[i];
for(i=0;i<h/2;i++){ t=b[i];b[i]=b[h-1-i];b[h-1-i]=t;}
for(e=1;e<n;e++)
{
for(i=0;i<h;i++)b[i]=b[i]c;
for(j=0;j<h-1;j++)
if(b[j]>=10){t=b[j];b[j]=t%10;b[j+1]+=t/10; }
if(b[h-1]>=10)
{
t=b[h-1];
q=b[h-1];
z=1;
while(t>=10)
{
t=t/10;
z++;
}
g=z;
while(z>=1)
{
b[h+g-z-1]=q/qq(g-z)%10;
z--;
}
h=h+g-1;
}
}
if(h<mn)
{
printf("");
for(j=mn-1;j>h-1;j--)printf("0");
for(j=0; ;j++)if(b[j]!=0)break;
for(i=h-1;i>=j;i--)
printf("%d",b[i]);
}
if(h==mn)
{ for(j=0; ;j++)if(b[j]!=0)break;
printf("");
for(i=h-1;i>=j;i--)
printf("%d",b[i]);
}
if(h>mn)
{
for(j=0; ;j++)if(b[j]!=0)break;
if(j<mn-1&&b[h-1]==0)
{
printf("");
for(i=mn-1;i>=j;i--)printf("%d",b[i]);
}
if(j<=mn-1&&b[h-1]!=0)
{ for(i=h-1;i>=mn;i--)
printf("%d",b[i]);
printf("");
for(i=mn-1;i>=j;i--)printf("%d",b[i]);
}
if(j>=mn)
{
for(i=h-1;i>=mn;i--)
printf("%d",b[i]);
}
} printf("\n");
}
return 0;
}
你这个题目有问题啊, 输入一个整数,然后输出比输入值大10的数,难道不就只有一个,还有所有的的
比5大10的数不就是15吗
#include<stdioh>
void main()
{
int b;
scanf("%d",&b);
printf("%d", b + 10);
}
再者,这样的题目你也要到网上问,是不是太懒了,除非自己完全没有学过编程,否则这样的题目怎么说也轻松啊
以上就是关于在C语言中如何是整数的范围变大全部的内容,包括:在C语言中如何是整数的范围变大、用c语言编写程序,求两个整数中的较大者并输出较大者。、c语言大整数运算问题高分求助各位帮忙,不胜感激 写了一个利用循环链表进行超大整数四则运算的c程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)