有点问题,因为你没有给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
}