您的位置:首页 > 其它

三天的努力,只弄懂了一个多位数相加

2014-02-21 22:11 337 查看

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];
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  算法 维基 成长