大数相加和大数相乘(二)

2014-11-23 23:30:11 · 作者: · 浏览: 15
(j = bignum1_length - 1; j >= 0; j--)
{
char *tmp_bignum1 = ctocs(bignum1[j]);
char *tmp_bignum2 = ctocs(bignum2[i]);
int tmp_multip = atoi(tmp_bignum1) * atoi(tmp_bignum2) + tmp_jinwei;
int tmp_gewei = tmp_multip % 10;
tmp_jinwei = tmp_multip / 10;
tmp[i][t++] = tmp_gewei + ASICNUM;
}
if(tmp_jinwei > 0)
{
tmp[i][t] = tmp_jinwei + ASICNUM;
}
else
{
tmp[i][t] = 0;
}
recover(tmp[i]);
// puts(tmp[i]);
}
result = (char *)malloc(sizeof(char) * (strlen(tmp[i+1]) + 1));
memset(result, '0', strlen(result));
for(int i = 0; i < bignum2_length; i++)
{
result = BigNumSum(tmp[i], result);
}
return result;
}
3、其他:
①字符串逆置:
void recover(char *string)
{
int length = strlen(string);
int tmp;
for(int i = 0; i < length / 2; i++)
{
tmp = string[i];
string[i] = string[length - i - 1];
string[length - i - 1] = tmp;
}
}
②判断是否是数字字符串:
bool isDigital(char *string)
{
bool ret = true;
int length = strlen(string);
for(int i = 0; i < length; i++)
{
if(string[i] < '0' || string[i] > '9')
{
ret = false;
break;
}
}
return ret;
}
③字符转换为字符串:
char *ctocs(char ch)
{
char *a;
a = (char *)malloc(sizeof(char) * 2);
a[0] = ch;
a[1] = 0;
return a;
}
④main函数调用:
int main(int argc, char **argv)
{
if(3 != argc)
{
printf("error\n");
return 1;
}
char *bignum1 = argv[1];
char *bignum2 = argv[2];
bool ret1 = isDigital(bignum1);
bool ret2 = isDigital(bignum2);
if(false == ret1 || false == ret2)
{
printf("input not number\n");
return 2;
}
char *multip_result = BigNumMultip(bignum1, bignum2);
char *sum_result = BigNumSum(bignum1, bignum2);
printf("数字 1:%s\n数字 2:%s\n两数积:%s\n两数和:%s\n", bignum1, bignum2, multip_result, sum_result);
return 0;
}
这段代码也就是按照一个最基本的思路进行简单的实现,基本如上,没有太多注释,目前可以预见到的问题就是:①执行效率、②内存消耗;后面有空会再进行优化的~
目前测试了一些数字,是可以正确返回的(当然,太大的数字也就是验证的后面或前面的几位的数字)。如果大家有发现不对有有问题的地方,求指点~