程序的主要逻辑用c语言完成了,有详细的注释。。。。
程序如下,运行结果见下图:C语言实现。。。。。。
#include
#include
#define MAX_LEN 200
void main()
{
int num1[MAX_LEN]; //存放测试用例
int num_test=0;//测试用例个数
//初始化数字数组num1[MAX_LEN]
for (int i=0;i { num1[i] = -1; } printf("输入测试用例个数(为整数):"); scanf("%d",&num_test); //输入num_test个测试用例数值存放到num1[max_len]中 for (i=0;i { printf("请输入第%d个测试用例:",i+1); scanf("%d",&num1[i]); } for(i=0;i { printf("\n"); //所有数的因子求玩后推出 if (num1[i]==-1) { return; }//end if printf("%d的所有因子为:",num1[i]); //处理特殊情况: 你给的条件不清楚。。。自己处理吧 //如果测试用例数据为0,那么进入下一循环 if (num1[i]==0) { printf(" 你自己填"); continue; }//endif if (num1[i]==1) { printf(" 你自己填"); continue; } //输出因子>1 for (int j=1;j<=num1[i]-1;j++) { //测试数据不为0 if (num1[i]%j == 0) { printf("%d ",j); }//end if }//end for printf("\n"); }//end for }//end main
#include "stdio.h"
#include "math.h"
void fun(char *f1,char *f2 )
{
FILE *fp1;
FILE *fp2;
int n,i,j;
/*打开用例文件*/
fp1=fopen(f1,"r");
if(!fp1)exit(1);
/*打开结果文件*/
fp2=fopen(f2,"w");
if(!fp2)exit(1);
/*取用例个数*/
fscanf(,fp1,"%d",&n);
for(i=1;i<=n;i++)
{
fscanf(fp1,"%d",&x);
for(j=1;j<=sqrt(x);j++) /*求因子并写和结果文件*/
if(x%j==0)
fprintf(fp2,"%d ", j);
fprintf(fp2,"\n");
}
}
int main( )
{
fun("in.txt","out.txt");
return 0;
}
如果必要的话,要注意in.txt和out.txt的路径。没有测试,自己试式吧。
这是我能想出得最快的算法:
因数间两两对应,只求其一,其一必不大于平方根
#include
#include
using namespace std;
class stack
{
public:
int *s,maxsize,top;
stack(){ top=-1;s=new int[maxsize=10]; }
~stack(){ delete [] s; }
void push(const int&item){if(top+1==maxsize)s=(int*)realloc(s,maxsize*=2);s[++top]=item;}
int pop(){ return s[top--]; }
bool empty(){ return top==-1; }
};
int main()
{
short T;
unsigned num,sqrt_n,i,j;
cin>>T;
for(i=0;i
cin>>num;
stack st;
sqrt_n=sqrt((double)num);//不比num平方根大的最大的正整数
cout<<1;
for(j=2;j
if(num%j==0)
{
cout<<' '<
}
}
if(sqrt_n*sqrt_n==num) cout<<' '<
system("pause");
return 0;
}
#include
void print_divisor(int num)
{
int i;
printf("1");
for (i=2; i
if (num%i==0)
printf(" %d", i);
printf("\n");
}
int main()
{
int n, i, num;
while (scanf("%d", &n)!=EOF) {
for (i=0; i
scanf("%d", &num);
print_divisor(num);
}
}
return 0;
}