昨天做了一道编程题,感觉很有意思,因此把题意和代码放上,为各位同学提供方便
题意是:
将一个小于1000000的数质因数分解,并且按照从小到大的顺序 利用 - 和 | 和 * 打印出来
例子:
输入:
1
99999
输出:
以下是源代码(如有错误,欢迎指正):
#include"stdio.h"
#include"stdlib.h"
void pri_number(int num,int line){
if(line==1){
if(num==1 || num==4)printf(" ");
else printf(" - ");
}
if(line==2){
if(num==0 || num==4 || num==8 || num==9){
printf(" | | ");
}
else if(num==1 || num==2 || num==3 || num==7){
printf(" | ");
}
else printf(" | ");
}
if(line==3){
if(num==0 || num==1 || num==7)printf(" ");
else printf(" - ");
}
if(line==4){
if(num==0 || num==6 || num==8){
printf(" | | ");
}
else if(num==1 || num==3 || num==4 || num==5 || num==7 || num==9){
printf(" | ");
}
else printf(" | ");
}
if(line==5){
if(num==1 || num==4 ||num==7)printf(" ");
else printf(" - ");
}
}
void prin(int* data,int num){
int temp;
int* out = (int*)malloc(sizeof(int)*10);
int out_num=0;
for(int i=1;i<=5;i++){
for(int j=0;j<num;j++){
out_num=0;
temp = data[j];
//分解一个数,比如 345分解成 3 4 5
for(int k=0;k<10 && temp!=0;k++){
out[out_num] = temp%10;
out_num++;
temp = temp/10;
}
for(int k=out_num-1;k>=0;k--){
pri_number(out[k],i);
}
if(i==3 && j!=num-1) printf(" * "); //第三行打印*号,并且不是最后一个数
else printf(" "); //其他的行打印空格
}
printf("\n");
}
}
void main(){
int in;
int N;
int* out = (int*)malloc(sizeof(int)*20);
int out_num=0;
scanf("%d",&N);
for(int i=0;i<N;i++){
scanf("%d",&in);
out_num=0;
for(int i=2;i <= in;){
if( in%i == 0 ){
out[out_num] = i;
out_num++;
in = in/i;
}
else i++;
}
prin(out,out_num);
}
system("pause");
}