标签:
题目:


#include <iostream>
#include <vector>
#include <string>
#include <list>
#define N 1000005
using namespace std;
bool prime[N]={0};
vector<int> ps; // 存放1到N内所有素数
void fenjie(vector<int> & suyinzi, int x){ // 素因子分解
for(int i=0;i<ps.size();i++){
while(x % ps[i] ==0){
suyinzi.push_back(ps[i]);
x /=ps[i];
}
}
}
char str[5][31]={
"*-*****-**-*****-**-**-**-**-*",
"|*|*|***|**||*||**|****||*||*|",
"*******-**-**-**-**-*****-**-*",
"|*|*|*|****|**|**||*|**||*|**|",
"*-*****-**-*****-**-*****-**-*"
};
char print[5][4*1000]={0}; // 打印缓冲区
void set(int col, char ch){ //从col列开始设置要显示的字符
if(ch == ‘*‘){
for(int i=0;i<5;i++) print[i][col] = ‘ ‘;
print[2][col] = ‘*‘;
return;
}
for(int i =0;i<5;i++)
for(int j=0;j<3;j++){
char temp=str[i][(ch-‘0‘)*3 + j];
print[i][col+j] = temp == ‘*‘ ? ‘ ‘ : temp;
}
}
void set(int col, string str){ ///从第col列开始,设置要显示的字符串
set(col,‘*‘);
col ++;
for(int i=0;i<str.size();i++){
set(col,str[i]);
col += 3;
}
}
string convert(int x){ //将整数转为字符串
list<char> li;
while(x!=0){
li.push_front(x%10 + ‘0‘);
x /= 10;
}
string str(li.begin(),li.end());
return str;
}
int main()
{
for(int i=2;i<1000;i++){
if(prime[i]) {
continue;
}
for(int j=i+i;j<N;j+=i)
prime[j] =1;
}
for(int i =2;i< N;i++ ) if(!prime[i]) ps.push_back(i);
int x;
while(cin >> x){
vector<int> suyinzi;
vector<string> vstr;
fenjie(suyinzi,x);
for(int i=0;i<suyinzi.size();i++){
vstr.push_back(convert(suyinzi[i]));
}
int count = suyinzi.size(),col=0;
::memset(print, 0,sizeof(print));
for(int i=0;i<vstr.size();i++){
set(col,vstr[i]);
col += vstr[i].size()*3+1;
}
for(int i=0;i<5;i++){
for(int j=1;j<col;j++)
cout << print[i][j];
cout << endl;
}
}
return 0;
}
标签:
原文地址:http://www.cnblogs.com/gaoyanqing/p/4811619.html