如何用C实现两个无限大的数相加???

yujunyao0811 2012-07-26 11:38:10
如何用C实现两个无限大的数相加???求大侠指点,代码最好容易懂的。。。谢谢啦!!!
...全文
388 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
hqw19881118 2012-07-27
  • 打赏
  • 举报
回复
这个太简单了,楼主把数写成带权求和的形式,然后借鉴下下初中数学中的多项式加法的思想吧,很快就可以解决
IVERS0N 2012-07-27
  • 打赏
  • 举报
回复
搜下 “大数相加”
ssslpk 2012-07-27
  • 打赏
  • 举报
回复


这是大数问题,加法代码如下:

char* add(char *x,char *y)
{
int i;
int c[1001]={0};
int a[1001]={0},b[1001]={0};
int lx=strlen(x);
int ly=strlen(y);
for(i=0;i<lx;i++)
{
a[lx-i-1]=x[i]-'0';
}
for(i=0;i<ly;i++)
{
b[ly-i-1]=y[i]-'0';
}
int maxlen;
if(lx>ly)maxlen=lx;
else maxlen=ly;
int temp;
for(i=0;i<=maxlen;i++)
{
temp=a[i]+b[i];
c[i]=temp%10;
a[i+1]+=temp/10;
}
if(c[maxlen]!=0) maxlen++;
for(i=maxlen-1;i>=0;i--)
{
cout<<c[i];
}
cout<<endl;
return 0;
}
芳草天 2012-07-27
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

转换成字符串了怎么相加啊?
[/Quote]十进制怎么加就怎么加。
yujunyao0811 2012-07-27
  • 打赏
  • 举报
回复
转换成字符串了怎么相加啊?
赵4老师 2012-07-27
  • 打赏
  • 举报
回复
#include <stdio.h>
#include <string.h>
#define MAXLEN 1000
char a1[MAXLEN];
char a2[MAXLEN];
static int v1[MAXLEN];
static int v2[MAXLEN];
static int v3[MAXLEN];
int i,j,n,L,z;
void main(void) {
scanf("%d",&n);
for (j=0;j<n;j++) {
scanf("%s%s",a1,a2);

L=strlen(a1);
for (i=0;i<L;i++) v1[i]=a1[L-1-i]-'0';

L=strlen(a2);
for (i=0;i<L;i++) v2[i]=a2[L-1-i]-'0';

for (i=0;i<MAXLEN;i++) v3[i]=v1[i]+v2[i];

for (i=0;i<MAXLEN;i++) {
if (v3[i]>=10) {
v3[i+1]+=v3[i]/10;
v3[i]=v3[i]%10;
}
}

printf("Case %d:\n", j+1);
printf("%s + %s = ", a1, a2);

z=0;
for (i=MAXLEN-1;i>=0;i--) {
if (z==0) {
if (v3[i]!=0) {
printf("%d",v3[i]);
z=1;
}
} else {
printf("%d",v3[i]);
}
}
if (z==0) printf("0");

printf("\n");
}
}
//Sample Input
//3
//0 0
//1 2
//112233445566778899 998877665544332211
//
//Sample Output
//Case 1:
//0 + 0 = 0
//Case 2:
//1 + 2 = 3
//Case 3:
//112233445566778899 + 998877665544332211 = 1111111111111111110
nwuwkg 2012-07-27
  • 打赏
  • 举报
回复
用链表存储每个数,每个节点存放数的一位
RiqueZhang 2012-07-27
  • 打赏
  • 举报
回复 1
方法一:把大数抽象成字符串,用户字符模拟十进制相加,末位对齐,逐位相加
方法二:把大数抽象成整型数组,转换成2^N进制(一般N取32或64),末位对齐,逐位相加
AnYidan 2012-07-27
  • 打赏
  • 举报
回复
google 大数运算
夏天__ 2012-07-27
  • 打赏
  • 举报
回复
好多问题百度一下就出来了。
ies_sweet 2012-07-27
  • 打赏
  • 举报
回复
用字符串来处理的确可以

有非常成熟的处理方法,楼主可以百度搜索一下
Gloveing 2012-07-27
  • 打赏
  • 举报
回复
只不过是字符串的处理操作而已:
http://blog.csdn.net/agoago_2009/article/details/6862290
maike413301 2012-07-27
  • 打赏
  • 举报
回复
字符串吧
sanbailiushiliuye 2012-07-26
  • 打赏
  • 举报
回复
没看过什么算法,以前做过的笔试题我用的方法是把数字转换成字符串相加

69,381

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧