大概的实现图样:
// 高精度加法 (封装)
#include <iostream>
#include <string>
using namespace std;
// string --> a[]
int StoA(string s, int a[])
{
int n = s.size();
for (int i = 0; i < n; i++)
{
a[n - 1 - i] = s[i] - 48;
/* printf("a[%d]:%d\n", n - i - 1, a[n - i - 1]); */
}
return n;
}
// a[] --> string
string AtoS(int a[], int n)
{
string s = "";
for (int i = 0; i < n; i++)
{
char t = a[i] + 48;
s = t + s;
}
return s;
}
// a[],n1 + b[],n2 --> c[],n3
int Plus(int a[], int n1, int b[], int n2, int c[])
{
int i, x, n3;
if (n1 > n2) //将a[]或b[]所缺的位数赋值为0
{
n3 = n1;
for (i = n2; i < n3; i++)
b[i] = 0;
}
else
{
n3 = n2;
for (i = n1; i < n3; i++)
a[i] = 0;
}
int jw = 0; // 进位
for (i = 0; i < n3; i++)
{
x = a[i] + b[i] + jw;
c[i] = x % 10;
jw = x / 10;
/*printf("c[%d]=%d,jw=%d\n",i, c[i],jw);*/
}
if (jw > 0) // 如果还有向高位的进位
{
c[n3] = jw;
n3++;
}
i = 0;
return n3;
}
int main()
{
string s1 = "389"; int a[1000], n1;
string s2 = "334"; int b[1000], n2;
string s3 = ""; int c[1000], n3;
n1 = StoA(s1, a); // s1 --> a[]
n2 = StoA(s2, b); // s2 --> b[]
n3 = Plus(a, n1, b, n2, c); // a[],n1 + b[],n2 --> c[],n3
int g;
if (n1 > n2)
g = n1;
else
g = n2;
for (int i = g - 1; i >= 0; i--)
printf("a[%d]\t", i);
cout << "a[ ] " << endl;
for (int i = g - 1; i >= 0; i--)
{
if (a[i] != 0)
printf("%d\t", a[i]);
else
printf("\t");
}
cout << endl ;
for (int i = g - 1; i >= 0; i--)
{
if(b[i]!=0)
printf("%d\t", b[i]);
else
printf("\t");
}
cout << endl;
for (int i = g - 1; i >= 0; i--)
printf("b[%d]\t", i);
cout << "b[ ] " << endl;
cout << "----------------------------" << endl;
for (int i = n3-1; i >= 0; i--)
printf("%d\t", c[i]);
cout << "c[ ] " << endl;
s3 = AtoS(c, n3); // c[] --> s3
cout << s3 << endl;
system("pause");
return 0;
}
/*
a[2] a[1] a[0] a[]:
3 8 9 s1:
+ 3 4 s2:
b[1] b[0] b[]:
----------------------
4 2 3 c[]:
*/
// 高精度减法 (封装)
#include <iostream>
#include <string>
using namespace std;
// string --> a[]
int StoA(string s, int a[])
{
int n = s.size();
for (int i = 0; i < n; i++)
{
a[n - 1 - i] = s[i] - 48;
}
return n;
}
// a[] --> string
string AtoS(int a[], int n)
{
string s = "";
for (int i = 0; i < n; i++)
{
char t = a[i] + 48;
s = t + s;
}
return s;
}
// a[],n1 + b[],n2 --> c[],n3
int Plus(int a[], int n1, int b[], int n2, int c[])
{
int i, x, n3;
if (n1 > n2) //将a[]或b[]所缺的位数赋值为0
{
n3 = n1;
for (i = n2; i < n3; i++)
b[i] = 0;
}
else
{
n3 = n2;
for (i = n1; i < n3; i++)
a[i] = 0;
}
int jw = 0; // 进位
for (i = 0; i < n3; i++)
{
x = a[i] - b[i] + jw;
c[i] = x % 10;
jw = 0;
if (c[i] < 0)
{
c[i] += 10;
jw = -1;
}
}
if (jw < 0) // 如果还有向高位的进位
{
c[n3] = jw;
n3++;
}
i = 0;
return n3;
}
int main()
{
string s1 = "383"; int a[1000], n1;
string s2 = "194"; int b[1000], n2;
string s3 = ""; int c[1000], n3;
n1 = StoA(s1, a); // s1 --> a[]
n2 = StoA(s2, b); // s2 --> b[]
n3 = Plus(a, n1, b, n2, c); // a[],n1 + b[],n2 --> c[],n3
int g;
if (n1 > n2)
g = n1;
else
g = n2;
for (int i = g - 1; i >= 0; i--)
printf("a[%d]\t", i);
cout << "a[ ] " << endl;
for (int i = g - 1; i >= 0; i--)
{
if (a[i] != 0)
printf("%d\t", a[i]);
else
printf("\t");
}
cout << endl;
for (int i = g - 1; i >= 0; i--)
{
if (b[i] != 0)
printf("%d\t", b[i]);
else
printf("\t");
}
cout << endl;
for (int i = g - 1; i >= 0; i--)
printf("b[%d]\t", i);
cout << "b[ ] " << endl;
cout << "----------------------------" << endl;
for (int i = n3 - 1; i >= 0; i--)
printf("%d\t", c[i]);
cout << "c[ ] " << endl;
s3 = AtoS(c, n3); // c[] --> s3
cout << s3 << endl;
system("pause");
return 0;
}