数据结构:超长正整数相加相乘

new56 2012-10-19 05:36:15
关于超长正整数相加进一的思路以及超长正整数相乘思路希望大神们指导
最好能有代码
先谢谢了
...全文
286 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
newtee 2012-10-19
  • 打赏
  • 举报
回复
咋变成两个帖子了
见另一个帖子
图灵狗 2012-10-19
  • 打赏
  • 举报
回复

#include <stdio.h>
#include <string.h>

void reverse(char* a)
{
int longth = strlen(a);

char t=0;
for ( int i=0; i<longth/2; i++ )
{
t = a[i];
a[i] = a[longth-i-1];
a[longth-i-1] = t;
}
}

void mult(char* op1, char* op2, char* ans)
{
int top1s = strlen(op1);
int top2s = strlen(op2);

char* top1=NULL;
char* top2=NULL;

if ( top1s<12 )
{
top1 = new char[12];
}
else
{
top1 = new char[top1s+1];
}

if ( top2s<12 )
{
top2 = new char[12];
}
else
{
top2 = new char[top2s+1];
}

strcpy(top1, op1);
strcpy(top2, op2);
reverse(top1);
reverse(top2);

for ( int k = 0; k<top1s+top2s; k++ )
{
ans[k] = '0';
}

int i,j;
int jw,ys;

for ( j = 0; j<top2s; j++ )
{
jw = 0;
for ( i = 0; i<top1s; i++ )
{
ys = ((top1[i]-'0')*(top2[j]-'0')+jw+ans[i+j]-'0')%10;
jw = ((top1[i]-'0')*(top2[j]-'0')+jw+ans[i+j]-'0')/10;

ans[i+j] = ys+'0';
}

if (jw>0)
{
ans[i+j] = jw+'0';
}
}

int longth = i+j-1;

if (jw>0)
{
ans[longth++] = jw+'0';
}

ans[longth] = '/0';
reverse(ans);

delete[] top2;
delete[] top1;
}

void usage()
{
printf("//-----超长正整数乘法运算器-----/////r/n");
printf("使用方法:multi 乘数 被乘数/r/n");
}

int main(int argc, char** argv)
{
if ( argc!= 3 )
{
usage();
return -1;
}

char* num1 = argv[1];
char* num2 = argv[2];

int len = strlen(num1)+strlen(num2)+2;

char* buf=NULL;

if ( len<12 )
{
buf = new char[12];
}
else
{
buf = new char[len];
}

mult(num1, num2, buf);

printf("/r/n结果为:/r/n%s/r/n", buf);

delete[] buf;

return 0;
}

图灵狗 2012-10-19
  • 打赏
  • 举报
回复

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct LNode{
int data;
struct LNode *next;
}LNode, *LinkList;

LinkList ListInsert(LinkList L,int e)
{
LinkList n;
if(n=(LinkList)malloc(sizeof(LNode)))
{
n->data=e;
n->next=L;
return n;
}else return L;
}

void DisplyList(LinkList L)
{
LinkList P=L;
while(P)
{
printf("%d",P->data);
P=P->next;
}
printf("\n");
}

void push(char *s,LinkList *L)
{
char t[4];
int m=0;
while(*s!='\0')
{
if(strlen(s)%4==1)
{
t[m++]=*s;
(*L)=ListInsert((*L),atoi(t));
m=0;
}else t[m++]=*s;
s++;
}
}


void add(LinkList L1,LinkList L2,LinkList *addL)
{
int c=0;
while(L1 && L2)
{
(*addL)=ListInsert((*addL),(L1->data+L2->data)%10000+c);
c=(L1->data+L2->data)/10000;
L1=L1->next;L2=L2->next;
}
if(L1)
{
while(L1)
{
(*addL)=ListInsert((*addL),L1->data+c);
c=0;
L1=L1->next;
}
}
if(L2)
{
while(L2)
{
(*addL)=ListInsert((*addL),L2->data+c);
c=0;
L2=L2->next;
}
}
}

int main(int argc, char *argv[])
{
LinkList L1,L2,addL;
L1=L2=addL=NULL;
if(argc!=3)
{
printf("1+1=3\n");
return -1;
}
else
{
push(argv[1],&L1);
push(argv[2],&L2);
}
add(L1,L2,&addL);
printf("%s + %s = ",argv[1],argv[2]);
DisplyList(addL);
return 0;
}
easyrem 2012-10-19
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
真心无难度啊...
实质就是一个数据结构
struct LargeInteger
{
UINT64 high;
UINT64 low;
}
[/Quote]
会比largeInteger长吗?
636f6c696e 2012-10-19
  • 打赏
  • 举报
回复
真心无难度啊...
实质就是一个数据结构
struct LargeInteger
{
UINT64 high;
UINT64 low;
}

70,024

社区成员

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

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