| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 489 人关注过本帖
标题:有比这更简单的算法吗?
取消只看楼主 加入收藏
Samz
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2006-4-3
收藏
 问题点数:0 回复次数:0 
有比这更简单的算法吗?

//程序作用:以字符串形式输入两个任意长度的整数,计算出这两个数的积(实验4.1)
//采用技术:数组,链表
//完成时间:2006.3.27
//作者:张亚南
#include <malloc.h>
#include <stdio.h>
#include <iostream.h>

typedef struct Lnode{
int data;
struct Lnode *next;
}Lnode;

void main()
{
Lnode *q,*p,*L0,*L1,*p_pre;
int n0=0,n1=0,i,j,n3;
int *a,*b,*c;
char m;
int temp0=0,temp1=0,temp2=0;
//读入数据
L0=(Lnode *)malloc(sizeof(Lnode));
L1=(Lnode *)malloc(sizeof(Lnode));

L0->next=NULL;
L1->next=NULL;
p=L0;
for(i=1;i<=2;i++)
{
if (i==1)
{
cout<<"请输入第一个数据(如果输入非数字字符将跳过):"<<endl;
printf("Number1=");
}
else
{
cout<<"请输入第二个数据(如果输入非数字字符将跳过):"<<endl;
printf("Number2=");
}

flushall();//清楚缓存中的其他字符
while((m=getchar())!=10)
{
if(m>='0'&&m<='9')
{
q=(Lnode *)malloc(sizeof(Lnode));
q->next=p->next;
p->next=q;
q->data=(int)(m-48);
if (i==1) n0++;
else n1++;
}
}
p=L1;
}
//将第一个数转变为数组,下标低的存储低位
p=L0->next;
a=(int *)malloc(n0*sizeof(int));
n3=n0;//记录以后计算结果的总位数
cout<<"实际输入的数据:"<<endl;

printf("Number1=");
for(i=0;i<n0;i++)
{
a[i]=p->data;
p->data=0; //将该链表的值置为0
p=p->next;
if(p==NULL) break;
}
for(i=n0-1;i>=0;i--)
printf("%d",a[i]);
//将第二个数转变为数组,下标低的存储低位,并将连表L1释放
p=L1->next;
free(L1);
b=(int *)malloc(n1*sizeof(int));
printf("\nNumber2=");
for(i=0;i<n1;i++)
{
b[i]=p->data;
p_pre=p;
p=p->next;
free(p_pre);
if(p==NULL) break;
}
for(i=n1-1;i>=0;i--)
printf("%d",b[i]);
cout<<endl;

//进行乘法运算
for(j=n1-1;j>=0;j--)
{ temp0=0;
p=L0->next;
for(i=0;i<n0;i++)
{
temp1=a[i]*b[j];
temp0=temp0/10+temp1;
p->data+=temp0%10;

temp2=p->data;

if(temp2>=10)//对相加超过10的数进行梳理
{q=p;
while(q->data>=10)
{
q->data=temp2%10;
q=q->next;
q->data+=temp2/10;
temp2=q->data;
if(q->next==NULL)
{
L1=(Lnode *)malloc(sizeof(Lnode));
q->next=L1;
q->data=temp2%10;
q=L1;
q->data=temp2/10;
n3++;
}
}
}
if(p->next!=NULL) p=p->next;
}
if(temp0/10!=0)
{
if(p->next!=NULL)
while(temp0>=10)
{
p->data=temp0/10+p->data;
temp0=p->data;
if(temp0>=10)
p->data=temp0%10;
if(p->next!=NULL)
p=p->next;
else
break;
}
else
{
q=(Lnode *)malloc(sizeof(Lnode));
n3++;//位数加一位
p->next=q;
p_pre=p;
p=q;
p->next=NULL;
p->data=temp0/10;
temp0=temp0/10;
}
}

//全部向高位移动一位
if(j>0)
{
q=(Lnode *)malloc(sizeof(Lnode));
n3++;//位数加1位
q->next=L0->next;
L0->next=q;
q->data=0;
}
}

c=(int *)malloc(n3*sizeof(int));
i=n3-1;
p=L0->next;
while(p!=NULL&&i>=0)
{
c[i]=p->data;
p_pre=p;
p=p->next;
free(p_pre);
i--;
}
cout<<"计算结果:"<<n3<<"位"<<endl;
printf("Result=");
for(i=0;i<n3;i++)
cout<<c[i];
cout<<endl;
}

搜索更多相关主题的帖子: 算法 
2006-04-03 14:07
快速回复:有比这更简单的算法吗?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.024718 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved