#include <stdio.h>
#include <string.h>
#include "stdafx.h"
#include <assert.h>
#define MAX(i, j) (((i) > (j)) ? (i) : (j))
void swap(char *pc1, char *pc2)
{
*pc1 = *pc1 ^ *pc2;
*pc2 = *pc1 ^ *pc2;
*pc1 = *pc1 ^ *pc2;
}
void reverse(char *pcStr, int iLen)
{
assert(NULL != pcStr);
//printf("%s\n", pcStr);
int iIdx;
for (iIdx = 0; iIdx < iLen ; iIdx++)
{
swap(&pcStr[iIdx], &pcStr[iLen]);
iLen--;
}
//printf("%s\n", pcStr);
}
char* calculate(char *pcNum1, char *pcNum2)
{
assert(NULL != pcNum1);
assert(NULL != pcNum2);
int iLen1 = 0;
int iLen2 = 0;
iLen1 = strlen(pcNum1);
iLen2 = strlen(pcNum2);
int iLenMax = MAX(iLen1, iLen2);
reverse(pcNum1, iLen1 - 1);
reverse(pcNum2, iLen2 - 1);
//char acResult[iLenMax+ 1] = {0}; /* 存放结果 */
char *acResult = (char *)malloc(sizeof(char) * (iLenMax+1));
assert(NULL != acResult);
memset(acResult, '0', sizeof(char) * (iLenMax+1)); /* 注意初始化 */
acResult[iLenMax+1] = '\0';/* 注意最后一个位置为\0 */
int i;
/* 注意公共部分和非公共部分的相加 */
for (i = 0; i < iLenMax; i++)
{
if ((i < iLen1) && (i < iLen2)) /* 公共部分 */
{
acResult[i] = (pcNum1[i] - '0') + (pcNum2[i] - '0');
}
else if (i < iLen1)
{
acResult[i] = (pcNum1[i] - '0');
}
else
{
acResult[i] = (pcNum2[i] - '0');
}
}
/* 调整结果值 */
for (i = 0; i < MAX(iLen1, iLen2); i++) /* 注意边界值 */
{
acResult[i + 1] += acResult[i] / 10;
acResult[i] = (acResult[i] % 10) + '0';
}
reverse(acResult, strlen(acResult) - 1);
return (acResult[0] == '0') ? acResult + 1 : acResult; /* 注意返回值 */
}
int main()
{
char pcNum1[] = "123456";
char pcNum2[] = "45645";
char *p;
//reverse(pcNum1, strlen(pcNum1) - 1);
p = calculate(pcNum1, pcNum2);
printf("%s\n", p);
return 0;
}
大数据 加法
最新推荐文章于 2021-01-11 20:03:21 发布