C语言计算高精度加法

Python013

C语言计算高精度加法,第1张

if(n==1)

有点问题,因为你没有给n赋初值,所以n的值不确定,也就是说可能为1,那该if语句就失效了。

另外,其实根本就没必要事先比较s1和s2的长度,模仿递增向量的合并方法,先计算长度相同的部分,之后计算剩余部分。

我用c++的string字符串写了一个,你参考下。

#include<iostream>

#include<string>

using

namespace

std

void

Reverse(string

&

str)

void

AddInt(string

&

c,

string

a,

string

b)

int

main()

{

string

a,

b,

c

cin

>>

a

>>

b

AddInt(c,

a,

b)

cout

<<

a

<<

"

+

"

cout

<<

b

<<

"

=

"

<<

endl

cout

<<

c

<<

endl

system("pause")

return

0

}

void

Reverse(string

&

str)

{

int

left,

right

left

=

0

right

=

str.size()-1

while

(left

<

right)

{

char

ch

=

str[left]

str[left]

=

str[right]

str[right]

=

ch

left++

right--

}

}

void

AddInt(string

&

c,

string

a,

string

b)//模仿递增向量的合并方法

{

c.resize(0)

Reverse(a)

Reverse(b)

//逆序计算a+b,则从低位开始计算

int

i,

carry

i

=

carry

=

0

while

(i

<

a.size()

&&

i

<

b.size())

{

c

+=

(a[i]-'0'

+

b[i]-'0'

+

carry)

%

10

+

'0'

carry

=

(a[i]-'0'

+

b[i]-'0'

+

carry)

/

10

i++

}

while

(i

<

a.size())

{

c

+=

(a[i]-'0'

+

carry)

%

10

+

'0'

carry

=

(a[i]-'0'

+

carry)

/

10

i++

}

while

(i

<

b.size())

{

c

+=

(b[i]-'0'

+

carry)

%

10

+

'0'

carry

=

(b[i]-'0'

+

carry)

/

10

i++

}

while

(carry

>

0)//计算进位部分

{

c

+=

carry

%

10

+

'0'

carry

/=

10

}

i

=

c.size()

-

1

while

(c[i]

==

'0')//消除多余的高位0

{

i--

}

c

=

c.substr(0,

i+1)

Reverse(c)

}

等十分钟 在给你写

加法函数 好久没写程序了 本来以为十分钟能写好 。。。。。(修改:修复了个小bug)

void plus(char *a, char *b, char *c){

int i,index_a,index_b,index_c,carry=0,ten='9'+1,temp_index_c

index_a=strlen(a)-1// index变量指向最末一个数字

index_b=strlen(b)-1

index_c=index_a>index_b? index_a:index_b

temp_index_c=index_c

if(index_a>=index_b){

for(i=index_b+1i>=0i--){

b[i+(index_a-index_b)]=b[i]

}

for(i=0i<index_a-index_bi++)

b[i]='0'

}

else{

for(i=index_a+1i>=0i--){

a[i+(index_b-index_a)]=a[i]

}

for(i=0i<index_b-index_ai++)

a[i]='0'

}

while(index_c>=0){

c[index_c]=a[index_c]+b[index_c]+carry-'0'

if(c[index_c]>=ten){

c[index_c]-=ten-'0'

carry=1

}

else

carry=0

index_c--

}

if(carry==1){

for(i=temp_index_ci>0i--){

c[i+1]=c[i]

}

c[0]=1

}

c[temp_index_c+1]=0

}