各位大佬,高精度加法程序如何写
怒求高精度加法程序 比如,1654864516546412346546
加
486546546546465
这种 a = 1654864516546412346546 + 486546546546465 {:10_277:} 不然你想怎样? 如果你是指計算超出int範圍的數的話,那你只要用long int或long long int就可以了!!{:5_106:}
但如果是浮點數那就直接用double即可!!!{:5_105:}
不知是否回答你的問題,還請你找出最佳解答!!!!感謝!!!{:5_105:}
由于数字的长度有限制,因此大数加法的位数也是有限的,
所以可以换种思路,把输入输出均看成字符串,然后对字符串处理(跟我们列竖式一样)
一位运算很容易,我们可以使用+进行运算
并且我们很容易知道每一位的结果都由这一位的 加数 和 被加数 以及上一位的 进位 来决定。
当这三者的和超过10 便是进位,对10取余便是本为的结果。用这种方法理论上我们可以实现无限多位的数相加(只要你内存够大,分配大点的数组存放即可)
#include <stdio.h>
#include <string.h>
void main( ) {
char a, b, c = {0}, flag = 0;/*c:存放结果,flag:进位信息*/
int i, j, k, m, n, len; /*i:跟踪a的下标,j:跟踪b的下标,k:跟踪c的下标*/
scanf("%s%s", a, b);
m = strlen(a);
n = strlen(b);
len = (m > n) ? m : n;
/*相加时,先将右边对齐,即将i指向a的右端,j指向b的右端,
然后i、j对齐,同步向左移动,直到其中一个到头为止*/
for(i = m - 1, j = n - 1, k = len - 1; i >= 0 && j >= 0; i--, j--, k--)
{
c = (a - '0' + b - '0' + flag) % 10 + '0';
flag = (a - '0' + b - '0' + flag) / 10;
}
for(; i >= 0; i--, k--)/*若a更长,即a没有处理完,处理a剩下的高位部分*/
{
c = (a - '0' + flag) % 10 + '0';
flag = (a - '0' + flag) / 10;
}
for(; j >= 0; j--, k--)/*若b更长,则方法同上*/
{
c = (b - '0' + flag) % 10 + '0';
flag = (b - '0' + flag) / 10;
}
if(flag != 0) /*若最终的最高位进位信息不为0*/
{
for(k = len; k > 0; k--)
c = c;
c = flag + '0';
}
printf("%s + %s = %s\n", a, b, c);
}
页:
[1]