zoukankan      html  css  js  c++  java
  • 数据结构实验之大数相乘

     

    这段时间一直非常忙啊。

    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的逆为 54312
    int 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<<"整数: 
    ";
            print(1);
            cout<<"
    和整数: 
    ";
            print(2);
            cout<<"
    的乘积为:
    ";
            print(3);
            cout<<endl<<endl;
    
            cout<<"是否继续计算。退出按'N'或'n' : ";
            cin>>choice;
            cout<<"**********************************************************"<<endl;
        }while( !(choice[0]=='N'||choice[0]=='n') );
    
        return 0;
    }
    


     

  • 相关阅读:
    消息队列介绍
    SpringBoot随笔-SpringBoot集成Druid
    Redis-Redis基本类型及使用Java操作
    信息安全
    计算机网络基础
    多媒体技术
    数据库基础
    程序设计基础
    计算机软件体系
    计算机硬件体系
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/5184909.html
Copyright © 2011-2022 走看看