老虎水中大战三鳄鱼:如何用C语言实现长整数的运算

来源:百度文库 编辑:高校问答 时间:2024/04/25 15:26:20
要求:通过键盘输入超过(可能超过计算机能够直接处理的范围)的两个数,计算输出其加,减,乘,除运算的结果,先用C语言实现,以后实现一个长整数类)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
各位高手帮帮忙,偶31号之前一定要交!!!谢谢!!!!

如果编译器支持c99标准那么用 long long 来定义64位的整数,这样的数已经很大了。当然c中可以自己定义有关大数储存运算的函数.要求熟悉数据结构的很多基本知识.当然也可以变通的去实现大数的运算!
1、变通的方法求1000!

#include<math.h> 
#include<stdio.h> 
int main() 

long i; 
double ln=0; 
for(i=1;i<=10000;i++) 
ln+=log10(i); 
i=(long)ln;ln=pow(10,ln-i); 
printf("10000!=%lf*10^%ld\n",ln,i); 
return 0; 
}

2、如果熟悉数据结构的知识可以用下面的方法解决

#include<stdio.h> 
#include<stdlib.h> 
#include<math.h> 
short mul(short a[],short d,short x) 

long i,y=0; 
for(i=0;i<d;i++) 

y+=a[i]*(long)x; 
a[i]=(short)(y%10000); 
y/=10000; 

a[d]=(short)y; 
return d+!!y; 

void main() 

long s; 
short *a,i,j,n,ws=1; 
printf("N=");scanf("%d",&n); 
#define Pi 3.14159265358979323846L 
s=(long)((log(2*Pi*n)/2+n*(log(n)-1))/log(10)+1); 
a=(short*)malloc((s/4+2)*sizeof(short));*a=1; 
for(i=2;i<=n;i++) 
ws=mul(a,ws,i); 
printf("%d!=%d",n,a[ws-1]); 
for(j=ws-2;j>=0;j--) 
printf("%04d",a[j]); 
printf("\n"); 
free(a); 
}

如果你的编译器支持c99标准那么用 long long 来定义64位的整数,这样的数已经很大了!
当然c中可以自己定义有关大数储存运算的函数.要求熟悉数据结构的很多基本知识.当然也可以变通的去实现大数的运算!
举个例子:求10000!的程序:
1.变通的方法求1000!
#include<math.h>
#include<stdio.h>
int main()
{
long i;
double ln=0;
for(i=1;i<=10000;i++)
ln+=log10(i);
i=(long)ln;ln=pow(10,ln-i);
printf("10000!=%lf*10^%ld\n",ln,i);
return 0;
}
2.如果熟悉数据结构的知识可以用下面的方法解决
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
short mul(short a[],short d,short x)
{
long i,y=0;
for(i=0;i<d;i++)
{
y+=a[i]*(long)x;
a[i]=(short)(y%10000);
y/=10000;
}
a[d]=(short)y;
return d+!!y;
}
void main()
{
long s;
short *a,i,j,n,ws=1;
printf("N=");scanf("%d",&n);
#define Pi 3.14159265358979323846L
s=(long)((log(2*Pi*n)/2+n*(log(n)-1))/log(10)+1);
a=(short*)malloc((s/4+2)*sizeof(short));*a=1;

for(i=2;i<=n;i++)
ws=mul(a,ws,i);

printf("%d!=%d",n,a[ws-1]);
for(j=ws-2;j>=0;j--)
printf("%04d",a[j]);
printf("\n");
free(a);
}
===============================================

编程爱好者群:24410693 只要对c有兴趣就可以申请加入本群.

#include <stdio.h>
void main(){
long number1=11232133811323231;
long number2=23032934125123123;
long addition=0;

addition=number1+number2;
printf("%ld+%ld=%ld",number1,nubmer2,addition);

}

首先要了解,长整型的变量的范围(10^-38-10^38)。
知道范围后根据需要定义一个变量,再给变量赋值,进行你需要的运算即可。

用字符串,模拟手工运算加法就行了。

用字符串

如果编译器符合c99标准那么用 long long 来定义64位的整数
比如:
long long a;

scanf("%lld",&a);
printf("%lld",a);