3116 高精度练习之加法
维基上的题目
加法要考虑的不是很多,但有很多细节需要注意,比如
1.输入时用char数组,让后转换成int数组2.注意下标
总之每个人的思路不同,错的地方也不同,我想说的是我这么简单的代码自己敲,改错,借鉴别人的,再重新敲,再改.整整弄了3天,除了上课什么别的事情也没干,就光光弄着么一小段代码.
在此给自己小小的鼓励.
#include <iostream>
#include <string.h>
using namespace std;
int pluses(int *a, int *b, int sizeA, int sizeB);
void print(int size);
int result[500];
int main()
{
for(int i=0; i<500; i++)
{
result[i] = 0;
}
char a[500], b[500];
int A[500], B[500];
memset(a, 0, sizeof(a));
memset(b, 0, sizeof(a));
cin >> a >> b;
int sizeA = strlen(a), sizeB = strlen(b);
int weiA=0, weiB=0;
for(weiA=0; weiA<sizeA; weiA++)
{
A[weiA] = a[weiA] - '0';
}
for(weiB=0; weiB<sizeB; weiB++)
{
B[weiB] = b[weiB] - '0';
}
//calculate
int wei = pluses(A, B, sizeA, sizeB);
print(wei);
return 0;
}
int pluses(int *a, int *b, int sizeA, int sizeB)
{
int wei=0;//结果的位数,从0开始 表示个位
while(sizeA>0 || sizeB>0)
{
result[wei++] += a[--sizeA] + b[--sizeB];
while(result[wei-1]>9)//进位
{
result[wei-1] -= 10;
result[wei] += 1;
}
while((sizeA*sizeB == 0) && ((sizeA+sizeB) != 0))
{
while(sizeA == 0 && sizeB != 0)
{
result[wei++] += b[--sizeB];
while(result[wei-1]>9)//进位
{
result[wei-1] -= 10;
result[wei] += 1;
}
}
while(sizeB == 0 && sizeA != 0)
{
result[wei++] += a[--sizeA];
while(result[wei-1]>9)//进位
{
result[wei-1] -= 10;
result[wei] += 1;
}
}
}
}
return wei;
}
void print(int size)
{
int i = size;
if(result[size] != 0)
{
cout << result[size];
}
while(i>0)
{
cout << result[--i];
}
}