数据结构实验之大数相乘

来源:互联网 发布:网络前沿技术有哪些 编辑:程序博客网 时间:2024/06/06 18:57

 

这段时间一直很忙啊。

Why? 到期末了呗,除了复习概率论等课,其他的课程设计接踵而来~。~

悲剧啊,有木有~

 

数据结构的相对来说是最简单的,

由于老师没抢到好时间,课程设计推迟到了下个学期。

但是,随堂实验还是要交的呀~

 

这次实验内容,就是做两个大数的乘积,括弧 整数 括回。

 

稍微把界面做了做,(画外音:明明就是用了几个*点缀呀!)

好吧,总之,就是这样了。

 

#include <iostream>#include <stdio.h>#include <string.h>#include <string>using namespace std;// arr,brr存两个整数,ans存答案int arr[10001],brr[10001],ans[10001];// 求n的逆  例如:n=21345 n的逆为 54312int fanzhuan( int n ){    int num=0;    while( n>0 )    {        num=num*10+n%10;        n/=10;    }    return num;}// 转换函数   将一个字符串转换为数组void convert( int num,string str ){    int i,j,k,sum,len;    len=str.length();    k=0,j=0;    if( num==1 )    {        sum=0;        for( i=len-1;i>=0;--i )        {            sum=sum*10+(str[i]-'0');            ++j;            if( j%4==0 )            {                arr[++k]=fanzhuan(sum);                sum=0;                j=0;            }        }        if( sum )   arr[++k]=fanzhuan(sum);        arr[0]=k;    }    else    {        sum=0;        for( i=len-1;i>=0;--i )        {            sum=sum*10+(str[i]-'0');            ++j;            if( j%4==0 )            {                brr[++k]=fanzhuan(sum);                sum=0;                j=0;            }        }        if( sum )   brr[++k]=fanzhuan(sum);        brr[0]=k;    }}// 判断输入的数字是否合法bool judge( string str ){    int i,len;    len=str.length();    if( !len )  return false;    for( i=0;i<len;++i )        if( str[i]<'0' || str[i]>'9' )            return false;    return true;}// 输入整数 函数string input( int num ){    string str;    cout<<"请输入第 "<<num<<" 个数据: ";    cin>>str;    while( !judge(str) )    {        cout<<" 输入数据错误,请重新输入:"<<endl;        cin>>str;    }    return str;}// 正确顺序输出数组内的数字void print( int flag ){    int i;    // flag为1 输出 arr,flag为2 输出 brr , flag为3 输出ans    if( flag==1 )    {        printf("%d",arr[ arr[0] ]);        for( i=arr[0]-1;i>0;--i )            printf("%04d",arr[i]);    }    else if( flag==2 )    {        printf("%d",brr[ brr[0] ]);        for( i=brr[0]-1;i>0;--i )            printf("%04d",brr[i]);    }    else    {        printf("%d",ans[ ans[0] ]);        for( i=ans[0]-1;i>0;--i )            printf("%04d",ans[i]);    }}// 计算乘法void product( void ){    int i,j,temp;    ans[0]=arr[0]+brr[0];    for( j=1;j<=brr[0];++j )    {        for( i=1;i<=arr[0];++i )        {            temp=arr[i]*brr[j]+ans[i+j-1];            ans[i+j-1]=temp%10000;            ans[i+j]= ans[i+j]+temp/10000;        }    }    if( ans[ arr[0]+brr[0] ]==0 )   ans[0]-=1;}int main(){    string str,choice;    cout<<"*******************欢迎使用大数乘法程序*******************"<<endl;    cout<<"*                                                        *"<<endl;    cout<<"*    本程序功能为计算两个整数的乘积,两个数的位数不限    *"<<endl;    cout<<"*                                                        *"<<endl;    cout<<"*                     ——————made by tree           *"<<endl;    cout<<"*                tree's blog -> blog.csdn.net/lttree     *"<<endl;    cout<<"**********************************************************"<<endl<<endl<<endl;    do    {        // 初始化        memset(arr,0,sizeof(arr));        memset(brr,0,sizeof(brr));        memset(ans,0,sizeof(ans));        // 输入两个数字        str=input(1);        convert(1,str);        str=input(2);        convert(2,str);        // 计算乘积        product( );        cout<<"整数: \n";        print(1);        cout<<"\n和整数: \n";        print(2);        cout<<"\n的乘积为:\n";        print(3);        cout<<endl<<endl;        cout<<"是否继续计算,退出按'N'或'n' : ";        cin>>choice;        cout<<"**********************************************************"<<endl;    }while( !(choice[0]=='N'||choice[0]=='n') );    return 0;}


 

1 0
原创粉丝点击