C++ 大数加法

来源:百度知道 编辑:UC知道 时间:2024/06/17 14:03:47
讨论的问题:大数加法中的一个正数和一个负数。
我以前做这种大数运算时,通常是先用一个函数来比较两个大数的绝对值,决运算结果的符号,然后用绝对值大的减小的,得到结果。
我发现去比较绝对值这工作很没技术含量。于是想能不能直接把两个大数按位相加,所得结果用适当的方法判断借位 和结果的符号,重而省去比较绝对这个过程。 我自己弄了一下,没什么进步……
可有人对这个算法感兴趣,或是有更好算法不啬对小弟点拨一二,小弟感激不尽!!

俺知道的能把加法和减法统一起来的就只有补码了,但是补码只能表示有范围的数。。。如果让俺弄这样的大数加法,俺也只会用楼主的想法了。。。

提示:使用数组

所谓的大数就是超过了计算机所表示的范围,比如一个整型数超过10^10则这个数无法用整型变量存储与运算。

方法一般是 使用字符串存储整数,则可以存储任意长的整数。

以下是一段 两个超长正整数相加的代码,比如计算
1234567890123456789 + 1111111111111111111
你研究一下吧,改一下做减法看能否行的通。
#include<iostream>
using namespace std;

char *add(char *s1 ,char *s2)
{
int n1 , n2 ,n;
char *res , c = 0;
n1 = strlen(s1);
n2 = strlen(s2);
n = n1 > n2 ? n1 : n2;
res = new char[n + 2];
int i;
for(i = n+1 ; i>= 0 ; i--)
res[i] = i>n-n1 ? s1[i-n-1+n1] : '0' ;
for(i = n; i>=0;i--)
{
char tchar;
tchar = i>n-n2 ? res[i] - '0' + s2[i-n-1+n2] - '0' +c : res[i] - '0' +c;
c = tchar>9 ? 1 :0;
res[i] = c >0 ? tchar - 10 + '0' : tchar + '0';
}