69,371
社区成员
发帖
与我相关
我的任务
分享
#include <stdio.h>
#include<malloc.h>
#include<stdlib.h>
#include<math.h>
#include<string.h>
int length1,length2;
char num1[100],num2[100];
int n1,n2,daxiao;
typedef struct DuLNode{
int data;
int carry;
struct DuLNode *prior;
struct DuLNode *next;
}NuLNode, *DuLinkList;
typedef struct{
char fuhao;
DuLNode *Top;
}LinkTop,*LinkList;
void AddList_L(LinkList L1,LinkList L2,LinkList &L3);
int SubList_L(LinkList L1,LinkList L2,LinkList &L3);
void ShowList(LinkList L);
int CreatList_L(LinkList &L,char num[],int &n){
L=(LinkList)malloc(sizeof(LinkTop));
DuLinkList p,q;
int temp,length=0;
char a;
int i=0,m=0,sum=0;
int a1=0,a2=0,a3=0,a4=0;
a=getchar();
if (a=='-') L->fuhao='-'; else
{
if (a!='0')
{L->fuhao='+';
num[i++]=a;}
else {
L->fuhao=' ';
num[i++]=a;
}
}
while ((a=getchar())!='\n') {
num[i++]=a;
}
num[i]='\0';
n=i;
if (i>0) a1=num[--i]-'0';
if (i>0) a2=num[--i]-'0';
if (i>0) a3=num[--i]-'0';
if (i>0) a4=num[--i]-'0';
sum=1000*a4+100*a3+10*a2+a1;
p=(DuLinkList)malloc(sizeof(DuLNode));
p->data=sum;
p->next = NULL;
p->prior = NULL;
L->Top=p;
q=p;
++length;
if (i%4!=0) m=i/4+1;
else m=i/4;
for(int k=0;k<m;k++){
int sum=0;
a1=0;
a2=0;
a3=0;
a4=0;
if (i>0) a1=num[--i]-'0';
if (i>0) a2=num[--i]-'0';
if (i>0) a3=num[--i]-'0';
if (i>0) a4=num[--i]-'0';
sum=1000*a4+100*a3+10*a2+a1;
p=(DuLinkList)malloc(sizeof(DuLNode));
p->next = NULL;
p->data=sum;
q->next=p;
p->prior=q;
q=p;
++length;
}
return length;
}
int main()
{
LinkList L1,L2,L3;
DuLinkList p;
int i=0;
printf("请输入两个长整数 \n");
length1=CreatList_L(L1,num1,n1);
length2=CreatList_L(L2,num2,n2);
printf("在链表中的形式是:") ;
ShowList(L1);
printf(" 和 ");
ShowList(L2);
printf("\n");
printf("运算结果是:");
if ((L1->fuhao=='+' && L2->fuhao=='+') ||(L1->fuhao=='-' && L2->fuhao=='-'))
AddList_L(L1,L2,L3);
else
SubList_L(L1,L2,L3);
ShowList(L3);
printf("按任意键结束 ");
getchar();
return 0;
}
void ShowList(LinkList L)
{
DuLinkList topNode = L->Top;
DuLinkList p = topNode,r;
printf("%c",L->fuhao);
while(p->next!=NULL) p=p->next;
while ((p->data==0) && (p->prior!=NULL))
{
p=p->prior;
}
while(p!=NULL)
{
printf("%04d,",p->data);
p=p->prior;
}
}
void AddList_L(LinkList L1,LinkList L2,LinkList &L3){
if (length1>=length2)
L3=L1;
else
L3=L2;
DuLinkList p,q,h,j;
DuLinkList hPrev = NULL;
int car;
p=L1->Top;
q=L2->Top;
h=L3->Top;
h->carry=0;
car = 0;
while(p && q)
{
h->carry = car;
h->data=((p->data)+(q->data)+(h->carry));
if((h->data) >=10000)
{
car=1;
h->data=(h->data)%10000;
}
else
{
car=0;
}
hPrev = h;
h=h->next;
p=p->next;
q=q->next;
}
if(!h){
j=(DuLinkList)malloc(sizeof(DuLNode));
j->data = 0;
j->next = NULL;
hPrev->next = j;
j->prior = hPrev;
h=j;
h->carry=car;
}
h->carry =car;
h->data=(h->data)+(h->carry);
}
int SubList_L(LinkList L1,LinkList L2,LinkList &L3){
LinkList Ltemp;
DuLinkList k;
int a=0;
L3=(LinkList)malloc(sizeof(LinkTop));
//L3为L1,L2中较大者,当两者一样大是,L3新建结点,data为零
if (n1>n2)
{
L3=L1;
a=1;
}
if (n1<n2)
{
L3=L2;
Ltemp=L1;
L1=L2;
L2=Ltemp;
a=1;
}
/* if(strcmp(num1,num2)==0)
{
L3=(LinkList)malloc(sizeof(LinkTop));
k->data=0;
L3->Top=k;
L3->fuhao=' ';
k->next = NULL;
k->prior = NULL;
return 0;
} */
if(n1==n2){
for(int i=0;i<n1;i++)
{
if(num1[i]>num2[i])
{
L3=L1;
a=1;
break;
}
if(num1[i]<num2[i])
{
L3=L2;
Ltemp=L1;
L1=L2;
L2=Ltemp;
a=1;
break;
}
}
if (a==0) {
k=(DuLinkList)malloc(sizeof(DuLNode));
k->data=0;
L3->Top=k;
L3->fuhao=' ';
k->next = NULL;
k->prior = NULL;
return 0;
}
}
k=(DuLinkList)malloc(sizeof(DuLNode));
DuLinkList p,q,h,j;
int car;
p=L1->Top;
q=L2->Top;
h=L3->Top;
h->carry=0;
car=0;
while ((p) && (q)){
h->carry = car;
h->data=(p->data)-(q->data)-(h->carry);
if((h->data) <0){
car=1;
h->data=(h->data)+10000;
}
else car=0;
h=h->next;
p=p->next;
q=q->next;
}
if (car==1)
h->carry=car;
if(h) {
h->data=(h->data)-(h->carry);
if(h->data<0){
car=1;
h->data=(h->data)+10000;
h=h->next;
h->carry=car;
h->data=(h->data)-(h->carry);
}
}
return 0;
}
#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