C语言两个超大很大的数相加可以是浮点数,整数
/************函数说明***************/
函 数 名:add
功能描述:超大数据相加处理
入口参数:
s1 --加数1
s1 --加数2
出口参数:
add_ret --和结果
返回说明:
返回0 --成功
返回-1 --失败
开发人员:董dong
开发日期:20160413
/**************************************/
int add(char *s1,char *s2,char *add_ret)
{
int len1,len2,biglen,tempbiglen,i;
int a
={0},b
={0};
char temp_conv[2] = {0};
char *ppos = NULL;
int iprecision,temp1,temp2;
len1 = strlen(s1);
len2 = strlen(s2);
printf("len1 = %d\n",len1);
printf("len2 = %d\n",len2);
ppos = strchr(s1,'.');
if (ppos == NULL)
{
temp1 = 0;
}
else
{
temp1 = len1-(ppos - s1) - 1;
}
ppos = strchr(s2,'.');
if (ppos == NULL)
{
temp2 = 0;
}
else
{
temp2 = len2-(ppos - s2) - 1;
}
if (temp1 == temp2)
{
iprecision = temp1;
}
else
{
printf("The two data don't have same precision! Don't support!\n");
return -1;
}
printf("iprecision = %d\n",iprecision);
if(len1 < len2)
biglen = len2;
else
biglen = len1;
tempbiglen = biglen;
if (iprecision != 0)
biglen -= 1;
for(i = 0; i < len1; i++)
{ // no point part
if (s1[len1 - 1 - i ] == '.')
{
continue;
}
a[biglen]=s1[len1 - 1 - i ] - '0';
biglen -= 1;
}
biglen = tempbiglen;
if (iprecision != 0)
biglen -= 1;
for(i = 0; i < len2; i++)
{
if (s2[len2 - 1 - i] == '.')
{
continue;
}
b[biglen]=s2[len2 - 1 - i] - '0';
biglen -= 1;
}
if (iprecision != 0)
tempbiglen -= 1;
for(i = tempbiglen; i >= 0; i--)
{
a[i] += b[i];
if(a[i] >= 10)
{
a[i] -= 10;
a[i-1]++;
}
}
printf("The add result is :\n");
if(a[0] != 0)
{
printf("Add one data to the highest bit\n");
for(i = 0; i <= tempbiglen; i++)
{
if (iprecision == 0)
{
// printf("%d",a[i]);
memset(temp_conv,0,sizeof(temp_conv));
sprintf(temp_conv,"%d",a[i]);
strcat(add_ret,temp_conv);
}
else
{
if (i == tempbiglen - iprecision + 1)
{
// printf(".");
strcat(add_ret,".");
}
// printf("%d",a[i]);
memset(temp_conv,0,sizeof(temp_conv));
sprintf(temp_conv,"%d",a[i]);
strcat(add_ret,temp_conv);
}
}
}
else
{
printf("The highest bit no add data\n");
for(i = 1; i <= tempbiglen; i++)
{
if (iprecision == 0)
{
// printf("%d",a[i]);
memset(temp_conv,0,sizeof(temp_conv));
sprintf(temp_conv,"%d",a[i]);
strcat(add_ret,temp_conv);
}
else
{
if (i == tempbiglen - iprecision + 1)
{
// printf(".");
strcat(add_ret,".");
}
// printf("%d",a[i]);
memset(temp_conv,0,sizeof(temp_conv));
sprintf(temp_conv,"%d",a[i]);
strcat(add_ret,temp_conv);
}
}
}
printf("add_ret = %s\n",add_ret);
return 0;;
}
阅读更多
- 请用C语言在32位环境下,两个无符号长整数相加的函数,相加之和不能存储在64位变量中
- 两个超大整数相加
- 两个超大正整数相加问题之链表实现(代码惨不忍睹,慎进)
- 两个超大整数相加之数组实现
- C语言实现两个超大数组相加
- 判断两个int类型的整数相加,相减是否溢出的C语言代码
- 两个超大整数求和。控制台输入两个30位以内超大整数,且其中至少有一个数大于18446744073709551615,程序能将两个数相加的结果输出。
- (面试题)请用C语言实现在32位环境下,两个无符号长整数相加的函数,相加之和不能存储在64位变量中
- 两个超大的整数相加(超过long长度范围)
- 请用C语言在32位环境下,设计一个32位无符号长整数求和函数,相加之和存储在两个32位无符号整数
- C语言两个整数相除所得结果仍是整数,而非浮点数
- 两个超大整数相加(c++)
- 两个超大数的相加
- c语言交换两个整数值的错误
- c语言编程 有5个砝码 分别是1,3,9,27,81 可以组合成1--121之间任意整数
- C语言实验——求两个整数之中较大者
- C语言判定是整数还是浮点数
- float 为什么可以表示很大的整数
- 不使用+、-、*、/完成两个整数的相加
- 用汇编实现任意长度的两个整数相加