题目:两个大整数相加
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
// 若有需要,在此添加辅助变量、方法
/**
* 以字符的方式输入连个大整数;相加后以字符串输出结果
*
* @param str1 大整数1
* @param str2 大整数2
* @return 字符串
*/
const char* com_baiyi_plusBigInt( const char* str1, const char* str2 ){
/** 先要判断字符串是否符合大整数相加的要求 */
/** 先求长度 */
int len1 = 0;
int len2 = 0;
int first = 0;
int i = 0;
int remberFirst = 0;
/** 测量str1的长度和检测是否符合要求 */
while( str1[len1] ){
if( str1[len1] < '0' || str1[len1] > '9' ){
return NULL;
}
len1++;
}
/** 测量str2的长度和检测是否符合要求 */
while( str2[len2] ){
if( str2[len2] < '0' || str2[len2] > '9' ){
return NULL;
}
len2++;
}
/** 判断长度是否为0 */
if( !len1 || !len2 ){
return NULL;
}
/** 进位标志 */
int temp = 0;
/** 长度最长的那个 */
if(len1 < len2){
first = len2;
}
else{
first = len1;
}
remberFirst = first;
/** 申请空间 */
char *p = ( char* )malloc( ( first + 2 ) * sizeof( char ) );
char *s = p;
p[0] = '0';
p[first + 1] = '\0';
/** 开始计算,结构存在p字符串里 */
len1--;
len2--;
while( len1 >= 0 && len2 >= 0 ){
p[first--] = str1[len1--] + str2[len2--] - '0';
}
/** 防止剩下的遗漏 */
while( len1 >= 0 ){
p[first--] = str1[len1--];
}
while( len2 >= 0 ){
p[first--] = str2[len2--];
}
/** 开始计算怕字符串里的 */
while( remberFirst > 0 ){
p[remberFirst] += temp;
if( p[remberFirst] > '9' ){
temp = ( p[remberFirst] - '0' ) / 10;
p[remberFirst] = p[remberFirst] - 10;
}
else{
temp = 0;
}
remberFirst--;
}
if(temp != 0){
p[0] = temp + '0';
}
/** 前置0的处理 */
while( i <= remberFirst ){
if( p[remberFirst] == '0' ){
s++;
}
else{
break;
}
i++;
}
/** 返回结果 */
const char* result = s;
return result;
}
int main()
{
const char* str1 = "523456789";
const char* str2 = "13546483456789";
const char* result = com_baiyi_plusBigInt(str1, str2);
printf("%s\n",result);
return 0;
}