c语言大数相加函数 c语言大数相加函数怎么表示

C 语言 大数相加

这个只能用字符串来解决

成都创新互联-专业网站定制、快速模板网站建设、高性价比罗平网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式罗平网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖罗平地区。费用合理售后完善,10余年实体公司更值得信赖。

void fx(char *x,int n)

{

char *p1=x,*p2=x+n; //这个可能控制不好,也就是1个位置的误差,自己调整一下吧

char t;

while(p1p2)

{t=*p1;*p1=*p2;*p2=t;p1++;p2++;}

}

main()

{

char a[100],b[100];

int c[100],d[100];e[101]={0};

int l1,l2,l3;

int i,n=100;

gets(a);

gets(b); //输入a,b。可以带printf标示输入这两个数,随你

//反序a,b,这个可以做个子函数,

l1=strlen(a);

fx(a,l1);

l2=strlen(b);

fx(b,l2);

for(i=0;il1;i++) //转换成整数

c[i]=a[i]-'0';

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

d[i]=b[i]-'0';

l3=l1l2?l1:l2;

e[0]=c[0]+d[0];

for(i=1;il3;i++)

{

e[i]=c[i]+d[i]+e[i-1]/10; //加上前一位的进位

e[i-1]%=10; //把前一位弄成个位数

}

//处理最高位

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

e[i]%=10;

//反序输出就可以了,可以处理一下高位余下的零

while(!e[n])

n--;

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

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

}

基本思路就是这样,我没有运行,可能有些小错误,自己解决一下吧

c语言 大数相加

c/c++中int和unsigned类型变量,都不能保存超过10位的整数,但有时我们需要计算位数非常长的整数或小数的加法。一般我们称这种基本数据类型无法表示的整数为大整数。如何表示和存放大整数呢?基本的思想就是:用数组存放和表示大整数。一个数组元素,存放大整数中的一位。

现在假如我们要计算俩个200位数的加法。显然,任何C/C++固有类型的变量都无法保存它。最直观的想法是可以用一个字符串来保存它。字符串本质上就是一个字符数组,因此为了编程更方便,我们也可以用数组int an[200]来保存一个200 位的整数,让an[0]存放个位数,an[1]存放十位数,an[2]存放百位数……那么如何实现两个大整数相加呢?方法很简单,就是模拟小学生列竖式做加法,从个位开始逐位相加,超过或达到10 则进位。也就是说,用int an1[201]保存第一个数,用int an2[200]表示第二个数,然后逐位相加,相加的结果直接存放在an1 中。要注意处理进位。另外,an1 数组长度定为201,是因为两个200 位整数相加,结果可能会有201 位。实际编程时,不一定要费心思去把数组大小定得正好合适,稍微开大点也无所谓,以免不小心没有算准这个“正好合适”的数值,而导致数组小了,产生越界错误。

下面是具体程序:

#includestdio.h

#includestring.h

#defineMAX_LEN 200

int an1[MAX_LEN+10];

int an2[MAX_LEN+10];

charszLine1[MAX_LEN+10];

charszLine2[MAX_LEN+10];

int main(void)

{

scanf("%s", szLine1);

scanf("%s", szLine2);

inti, j;

memset( an1, 0, sizeof(an1));

memset( an2, 0, sizeof(an2));

int nLen1 = strlen( szLine1);

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

an1[j++] = szLine1[i]- '0';

int nLen2 = strlen(szLine2);

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

an2[j++] = szLine2[i]- '0';

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

{ an1[i]+= an2[i];//逐位相加

if( an1[i] = 10 ) 

{ //看是否要进位

an1[i] -= 10;

an1[i+1] ++; //进位

}

}

for( i = MAX_LEN; (i= 0)  (an1[i] == 0); i-- ) ;

if(i=0)

for( ; i = 0; i--)

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

else     printf("0");

return 0;

}

C语言大数相加,在线等,急

效果:

代码:

#includestdio.h

#includestring.h

void reverse(char s[]) {

int len = strlen(s), h = len / 2;

char temp;

for (int i = 0; i  h; ++i) {

temp = s[i];

s[i] = s[len - i - 1];

s[len - i - 1] = temp;

}

}

#define System 10

#define MAX 24

const char mx = '9';

const char mn = '0';

char* Sum(char s1[], char s2[]) {

char ans[MAX];

int len1 = strlen(s1), len2 = strlen(s2), ad = 0, min = len1  len2 ? len1 : len2, max = len1len2 ? len1 : len2, i;

char* st1, *st2;

if (len1  len2) { st1 = s2; st2 = s1; }

else { st1 = s1; st2 = s2; }

reverse(st1);

reverse(st2);

for (i = 0; i  min; i++) {

ans[i] = st1[i] + st2[i] - '0' + ad;

if (ans[i]  mx) {

ans[i] -= System;

ad = 1;

}

else ad = 0;

}

while (ad != 0 || i max) {

if (i  max)ans[i] = st2[i] + ad;

else ans[i] = mn + ad;

if (ans[i]  mx) {

ans[i] -= System;

ad = 1;

}

else ad = 0;

i++;

}

ans[i] = '\0';

reverse(ans);

return ans;

}

int main() {

char A[21], B[21], C[50], *ans;

int n, m;

scanf("%d %d", m, n);

scanf("%s %s", A, B);

ans = Sum(A, B);

strcpy(C, ans);

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

}


标题名称:c语言大数相加函数 c语言大数相加函数怎么表示
网站地址:http://azwzsj.com/article/ddcdihd.html