成都网站建设设计

将想法与焦点和您一起共享

c语言超长整数加法的函数 大整数加减c语言

C语言超长整数相加?

#include stdio.h#include string.h#define MAXLEN 1000void longadd(char* s1,char* s2 ,int* s3)

目前创新互联已为成百上千的企业提供了网站建设、域名、虚拟空间、成都网站托管、企业网站设计、铁岭县网站维护等服务,公司将坚持客户导向、应用为本的策略,正道将秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。

{ int arr1[MAXLEN]; int arr2[MAXLEN]; int arr3[MAXLEN]; int i; //求字符串长度 倒序放在int 数组里面

int len1 = strlen(s1); for( i = 0; i len1; i++)

{

arr1[i] = s1[len1-1-i] - '0';

} //求字符串长度 倒序放在int 数组里面

int len2 = strlen(s2); for( i = 0; i len2; i++)

{

arr2[i] = s2[len2-1-i] - '0';

} //加法运算

for( i = 0; i MAXLEN; i++)

{

arr3[i] = arr1[i] + arr2[i];

} //数据处理 超过9的 进行取余 并且进位

for( i = 0; i MAXLEN; i++)

{ if(arr3[i] = 10)

{

arr3[i+1] += arr3[i] / 10;

arr3[i] = arr3[i] % 10;

}

s3[i] = arr3[i];

} return;

}int main(int argc, char const *argv[])

{ char buff1[MAXLEN]; char buff2[MAXLEN]; int arr[MAXLEN]; puts("input 1:");

gets(buff1); puts("input 2:");

gets(buff2);

longadd(buff1,buff2,arr); //通过z变量的值过滤前面的0 倒序输出

int z = 0; for(int j =MAXLEN -1 ; j = 0 ; j-- )

{ if(z == 0)

{ if(arr[j] != 0)

{ printf("%d",arr[j]);

z= 1;

}

} else

{ printf("%d",arr[j]);

}

} //如果z值没有改变 则输出0

if( z== 0)

{ printf("0\n");

} return 0;

}

C语言中怎么实现两个超大整数的相加减乘除

#include string.h

#include stdio.h

#include stdlib.h

#define N 100

int main(int argc, char const *argv[])

{

char arr[N] = {};

gets(arr);

char brr[N] = {};

gets(brr);

int len1,len2,i = 0,j = 0;

len1 = strlen(arr);

len2 = strlen(brr);

int len = len1len2?len1:len2;

/*  c99之后数组初始化支持整型表达式,称为可变长数组,但按照c89的标准是不对的

int num1[len]; //将字符串转换成翻转的整型数组

int num2[len];

*/

int* num1 = (int*)malloc(len*sizeof(int));

int* num2 = (int*)malloc(len*sizeof(int));

for (i = 0; i len; i++)

{

num1[i] = ilen1 ? arr[len1-i-1]-'0':0;

}

for (j = 0; j len; j++)

{

num2[j] = jlen2 ? brr[len2-j-1]-'0':0;

}

//int sum[len]; //定义和数组

int* sum = (int*)malloc(len*sizeof(int));

int flag=0; //设进位符

for (i = 0; i len; i++)

{

sum[len-1-i] = (num1[i]+num2[i]+flag)%10;

flag = (num1[i]+num2[i]+flag)/10;

}

if (flag == 1) printf("1");   //如果最高位有进位 则输出一个1

for (i = 0; i len; i++)

{

printf("%d",sum[i]);

}

printf("\n");

free(num1);

free(num2);

free(sum);

num1 = NULL;

num2 = NULL;

sum = NULL;

return 0;

}

扩展资料:

gets()函数用法

gets是从标准输入设备读字符串函数。

函数原型:char*gets(char*str);

功能为:从stdin流中读取字符串,直至接受到换行符或EOF时停止,并将读取的结果存放在buffer指针所指向的字符数组中。换行符不作为读取串的内容,读取的换行符被转换为‘\0’空字符,并由此来结束字符串。

注意:不会判断上限,以回车结束读取,所以程序员应该确保buffer的空间足够大,以便在执行读操作时不发生溢出。使用时需要包含stdio.h头文件

参数

str为字符串指针,用来存放读取到的数据。

返回值

读入成功,返回与参数buffer相同的指针;读入过程中遇到EOF(End-of-File)或发生错误,返回NULL指针。所以在遇到返回值为NULL的情况,要用ferror或feof函数检查是发生错误还是遇到EOF。

用c语言实现超长整数的加法运算

#include "stdio.h"

int sum(int a[],int b[],int c[])

{

int i=0,j=0,f=0;

for(;i21;i++)

{

j=a[i]+b[i]+j;

if(j!=0) f=i;

c[i]=j%10000;

j=j/10000;

}

c[i]=j;

return f;

}

void get(int a[])

{

int n,i,j;

scanf("%d",n);

j=(n-1)/4;

switch (n%4)

{

case 3:scanf("%3d",a[j]);break;

case 2:scanf("%2d",a[j]);break;

case 1:scanf("%1d",a[j]);break;

case 0:scanf("%4d",a[j]);break;

}

for(i=j-1;i=0;i--)

scanf("%4d",a[i]);

}

void main()

{

static int a[20],b[20],c[21],i,n,f;

char d[80];

get(a);

get(b);

f=sum(a,b,c);

for(i=f;i=0;i--)

printf("%4d",c[i]);

}

C语言 超长整数加法

以前我也做过一个大整数程序,2000!,不过那里面没有减法。做这个减法真让花时间啊。

#includestdio.h

#includestring.h

#includemath.h

#define MAX 4000/*数位上限*/

dd(char *a)

{

char t[MAX];

int i,j;

for(i=0;iMAX;i++)

{

if(a[i]==NULL)

{

for(j=0;i0;j++,i--)

{

t[j]=a[i-1];

}

strncpy(a,t,j);

break;

}

}

}

add1(char *a,char *b,int n,char *c)

{

int N;

if(*a!=NULL*b!=NULL)

N=*a-'0'+*b-'0'+n;

else if(*a==NULL*b!=NULL)

N=*b-'0'+n;

else if(*a!=NULL*b==NULL)

N=*a-'0'+n;

else

N=n;

*c=(N%10)+'0';

N=N/10;

if(*(a+1)!=NULL||*(b+1)!=NULL||N!=0)

{

add1(a+1,b+1,N,c+1);

}

}

addab(char *a,char *b,char *c)

{

dd(a);

dd(b);

dd(c);

add1(a,b,0,c);

dd(a);

dd(b);

dd(c);

}

d_(char *a)

{

int i;

for(i=0;a[i]!=NULL;i++)

{

a[i]=a[i+1];

}

}

udg1(char *a,char *b,int n,char *c)

{

int N;

if(*b==NULL)

{

N=*a-'0'-n;

n=0;

}

else

{

if(*a=(*b+n))

{

N=*a-*b-n;

n=0;

}

else

{

N=*a+10-*b-n;

n=1;

}

}

*c=N+'0';

if(*(a+1)!=NULL)

udg1(a+1,b+1,n,c+1);

}

udg(char *a,char *b,char *c)

{

int i;

if((strcmp(a,b)0strlen(a)==strlen(b))||strlen(a)strlen(b))

i=1;

else if((strcmp(a,b)0strlen(a)==strlen(b))||strlen(b)strlen(a))

i=-1;

else

i=0;

dd(a);

dd(b);

dd(c);

if(i==1)

udg1(a,b,0,c);

else if(i==-1)

{

udg1(b,a,0,c);

for(i=0;iMAX;i++)

{

if(c[i]==NULL)

{

c[i]='-';

break;

}

}

}

else

*c='0';

dd(a);

dd(b);

dd(c);

}

add_(char *c)

{

int i;

char t1,t2;

t1=c[0];

t2=c[1];

c[0]='-';

for(i=1;t1!='\0';i++)

{

c[i]=t1;

t1=t2;

t2=c[i+1];

}

}

main()

{

char a[MAX]={NULL},b[MAX]={NULL},c[MAX]={NULL};

printf("输入两个数:\n");

scanf("%s",a);

getchar();

scanf("%s",b);

getchar();

if(a[0]!='-'b[0]!='-')

{

addab(a,b,c);

}

else

{

if(a[0]=='-'b[0]!='-')

{

d_(a);

udg(b,a,c);

}

else if(a[0]!='-'b[0]=='-')

{

d_(b);

udg(a,b,c);

}

else

{

d_(b);

d_(a);

addab(a,b,c);

add_(c);

}

}

printf("%s\n",c);

getchar();

}


网站标题:c语言超长整数加法的函数 大整数加减c语言
转载来于:http://chengdu.cdxwcx.cn/article/hjogdd.html