c语言 大整数加法

Python017

c语言 大整数加法,第1张

#include<stdio.h>

#include<string.h>

//翻转

void *reverse(char str[])

{

int len =strlen(str)

char*ps,*pe,tmp

ps=str,pe=str+len-1

for( ps<peps++,pe--)

{

tmp=*ps

*ps=*pe

*pe=tmp//need *

}

return str//dont't forget return str

}

//相加,并ascii码变为相应的数字

void add(char a[],char b[])

{

char *pl,*ps

int i,la,lb,len

la=strlen(a)

lb=strlen(b)

(la>lb)?(pl=a,ps=b,len=lb):(pl=b,ps=a,len=la)

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

{

pl[i] += ps[i]-96//96=2*'0'

//don't need *

}

len = (la>lb)?la:lb

for( i<leni++)

{

pl[i] -= 48//don't need *

}

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

{

if(pl[i] >9)

{

pl[i+1]++

pl[i] %= 10

}

}

if(pl[len] != 0)

{

printf("%d",pl[len])

}

for(i=len-1 i>=0 i--)

{

printf("%d",pl[i])

}

}

int main()

{

char a[200],b[200]

scanf("%s%s",a,b)

add(reverse(a),reverse(b))

return 0

}

把两个数用数组倒过来存放 比如 567 +789

变成765+987

然后两个数组就是

a[]={7,6,5}

b[]={9,8,7}

对应的相加变为c数组

c[] ={7+9,6+8,5+7}

变为 16 14 12

然后看进位16留下6,前面进一位14变为15变为 6 15 12

再看中间15留下5,前面进一位12变为13,变为 6 5 13

再看 13留下3,向前进一位 变为1,那么最后变为6 5 3 1

最后倒过来,结果就是1356

for (i = 0i <Mi++)

{

c1[i] += (a1[i] + b1[i]) % 10

c1[i + 1] += (a1[i] + b1[i]) / 10

}

这是处理进位的代码

效果:

代码:

#include<stdio.h>

#include<string.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 = len1>len2 ? 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)

}