数据结构实验之大数相乘
来源:互联网 发布:网络前沿技术有哪些 编辑:程序博客网 时间: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
- 数据结构实验之大数相乘
- 数据结构课程设计-大数相乘
- 大数相乘之1001
- 高精度问题之大数相乘
- 大数相乘之求N!
- 分治算法之大数相乘
- 大数相乘
- 大数相乘
- 大数相乘
- 大数相乘
- 大数相乘
- 大数相乘
- 大数相乘
- 大数相乘
- 大数相乘
- 大数相乘
- 大数相乘
- 大数相乘
- C++类和对象的模板的实验
- ui计算器
- 每日算法之三十二:First Missing Positive
- OnSize 改变控件的大小
- Java 目录的表达方式
- 数据结构实验之大数相乘
- C++类运算符重载实验
- dffwgrfrfrefnre
- notepad中文复制乱码的问题
- [ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:2.3.2:compile
- codeforce 11B 思维题
- 数据库的建立——物资管理系统
- 关于typedef的用法总结
- javaweb 手动配HTTP