360 笔试题 因子计算器的实现

来源:互联网 发布:淘宝上买腾讯视频会员 编辑:程序博客网 时间:2024/05/16 10:33

要求:输入一个数,输出它的因子相乘形式。如10

输出

 -   - 
  | |
 - * -
|     |
 -  -

笔试的时候不知道是要求把这些都打印出来,还是计算出因子就OK,反正我打印出来了。也没调试完就交卷了。打印出来有点蠢蠢的。

代码如下:


#include<iostream>#include<vector>#include<algorithm>#include<stack>using namespace std;bool isPrime(int n){if(n<=1) return false;if(n==2||n==3||n==5) return true;for(int i=2;i<=n/2;i++){if(n%i==0) return false;}return true;}vector<int> Prime(int n){vector<int> res;if(isPrime(n))res.push_back(n);else{int ttt=n;for(int i=2;i<=n;i++)   {    if((n%i==0)&&isPrime(i)){ res.push_back(i); n=n/i; i=1;}      }}return res;}vector<vector<char>> PrintDigit(int n){vector<vector<char>> ch;vector<char> temp(3,' ');for(int i=0;i<5;i++)ch.push_back(temp);    ch[0][0]=' ';ch[0][1]='-';ch[0][2]=' ';ch[1][0]='|';ch[1][1]=' ';ch[1][2]='|';ch[2][0]=' ';ch[2][1]=' ';ch[2][2]=' ';ch[3][0]='|';ch[3][1]=' ';ch[3][2]='|';ch[4][0]=' ';ch[4][1]='-';ch[4][2]=' ';if(n==0){return ch; }else if(n==1){ch[0][0]=' ';ch[0][1]=' ';ch[0][2]=' ';ch[1][0]=' ';ch[1][1]=' ';ch[2][0]=' ';ch[2][1]=' ';ch[2][2]=' ';ch[3][0]=' ';ch[3][1]=' ';ch[4][0]=' ';ch[4][1]=' ';ch[4][2]=' ';}else if(n==2){ch[1][0]=' ';ch[2][1]='-';ch[3][2]=' ';}else if(n==3){ch[1][0]=' ';ch[2][1]='-';ch[3][0]=' ';}else if(n==4){ch[0][1]=' ';ch[2][1]='-';ch[3][0]=' ';ch[4][1]=' ';}else if(n==5){ch[1][2]=' ';ch[2][1]='-';ch[3][0]=' ';}else if(n==6){ch[1][2]=' ';ch[2][1]='-';}else if(n==7){ch[1][0]=' ';ch[3][0]=' ';ch[4][1]=' ';}else if(n==8){ch[2][1]='-';}else if(n==9){ch[2][1]='-';ch[3][0]=' ';}else ;return ch;}void merge(vector<vector<char>>&a,vector<vector<char>>&b,int flag){if(a.size()==0) {a=b;return;}if(flag==1){     for(int i=0;i<5;i++){for(int j=0;j<3;j++)a[i].push_back(b[i][j]);}}else{ for(int i=0;i<5;i++)   {for(int j=0;j<1;j++){if(i==2)               a[i].push_back('*');elsea[i].push_back(' ');}   }}}void Print(vector<int>prime){//sort(prime.begin(),prime.end());vector<vector<char>> res;for(int i=0;i<prime.size();i++){int cur=prime[i];stack<int> bit_w;while(cur){bit_w.push(cur%10);cur/=10;}vector<vector<char>> bit_ch;while(!bit_w.empty()){int temp=bit_w.top();bit_w.pop();bit_ch=PrintDigit(temp);merge(res,bit_ch,1);}if(i!=prime.size()-1)merge(res,bit_ch,0);}for(int i=0;i<5;i++){for(int j=0;j<res[i].size();j++)cout<<res[i][j];cout<<endl;}}void main(){int n;cin>>n;while(n){if(n<0)break;vector<int> pr=Prime(n); Print(pr); cin>>n;}}


0 0