c++ 求正整数的所有因子

2024-12-01 05:36:37
推荐回答(4个)
回答(1):

程序的主要逻辑用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

回答(2):

#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的路径。没有测试,自己试式吧。

回答(3):

这是我能想出得最快的算法:
因数间两两对应,只求其一,其一必不大于平方根
#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<<' '< st.push(num/j);
}
}
if(sqrt_n*sqrt_n==num) cout<<' '< else if(num%sqrt_n==0){ cout<<' '< while(!st.empty()) cout<<' '< cout< }
system("pause");
return 0;
}

回答(4):

#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;

}