#include
# include
#define N 100
long factor(int m,int fac[],int *cp){
int c1,c2,i,k;
long s;
fac[0]=1;
for(c1=s=1,c2=N-1,i=2;;){
k=m/i;
if(m%i==0){
if(i!=k){
fac[c1++]=i;
fac[c2--]=k;
s+=i+k;
printf("i=%d k=%d\n",i,k);
}else{
fac[c1++]=i;
s+=i;
}
}
i++;
if(i>=k) break;//这个时候k已经开始等于自身的根号,或者将要出现和之前k对称的i,引起自身重复故退出
}
for(c2++;c2<=N-1;c2++){
fac[c1++]=fac[c2];
printf("%s %d\n","**",fac[c2]);
}
*cp=c1;
return s;
}
int main(int argc, char const *argv[])
{
/* code */
int factors[N],i,count;
long sum;
sum = factor(atoi(argv[1]),factors,&count);
for(i=0;i printf("%5d",factors[i]); } printf("\n\n"); printf("sum=%5ld count=%5d\n",sum,count); return 0; } 扩展资料: 有一种说法是“因子不限正负”,不过通常情况下只取正因子。 1, -1, n 和 -n 这些数叫做 n 的明显因子 表示方法:可以用因子|倍数或倍数≡0 (mod 因子) 来表达(参见同余),但用后者时因子一定要是正因子。因子∣倍数 式中的垂直线是整除符号。它的统一码值是 U+2223。 例如 42=6x7,因此 7 是 42 的因子,写作 7∣42,亦是42≡0(mod 7)。
#include
int m;
void num(int n,int b[])
{
int i,j,a[100];
j = 0;
for(i=1;i<=n/2;++i)
{
if(n%i==0)
a[j++] = i;
}
for(i=0;ib[i] = a[i];
m = j;
return;
}
int main()
{
int i,n,b[100];
scanf("%d",&n);
num(n,b);
for(i=0;iprintf("%d ",b[i]);
return 0;
}
要写成动态的可以这样:
#include
int m;
void num(int n,int *&b)
{
int i,j,a[100];
j = 0;
for(i=1;i<=n/2;++i)
{
if(n%i==0)
a[j++] = i;
}
b = new int[j];
for(i=0;ib[i] = a[i];
m = j;
return;
}
int main()
{
int i,n,*b,*p;
scanf("%d",&n);
num(n,b);
for(i=0;iprintf("%d ",b[i]);
return 0;
}
将a数组作为形式参数,把a中的数据传递给主调函数中的实参数组b。实参数组b的大小要保证能够存放整数m的因子
这句话好神奇……
这句话似乎想要这样:
#include
int m;
void nstrcpy(int a[],int b[])
{
int i;
for(i=0;ib[i] = a[i];
}
void num(int n,int b[])
{
int i,j,a[100];
j = 0;
for(i=1;i<=n/2;++i)
{
if(n%i==0)
a[j++] = i;
}
m = j;
nstrcpy(a,b);
return;
}
int main()
{
int i,n,b[100];
scanf("%d",&n);
num(n,b);
for(i=0;iprintf("%d ",b[i]);
return 0;
}
struct factorsTable
{
int* factorStart;
int count;
}
factorsTable* getFactors(int num)
{
if (num < 0) {
return NULL;
}
....
}
建议这么写,这样就可以解决数组返回指针头,不能返回数组长度问题。
#include
#include
#include
#include
using namespace std;
int yinzi(int m,int *a)
{
int max=sqrt(m);
int j=0;
for(int i=1;i<=max;i++)
{
if((m%i)==0)
{
a[j]=i;
j++;
a[j]=m/i;
j++;
}
}
return j;
}
int main(int argc, char *argv[])
{
int m;
int *b=new int[m];
cin>>m;
int len=yinzi(m,b);
for(int i=0;icout< cout< return 0;
}
#include
int Find_Divisor(int *a, int m);
int main()
{
int nTemp;
printf("Enter an integer:");
scanf("%d", nTemp);
int *b = (int *)malloc(sizeof(int) * nTemp);
int num = Find_Divisor(b, nTemp);
for (int i = 0; i < num; i++)
printf("%d ", b[i]);
return 0;
}
int Find_Divisor(int *a, int m)
{
int j = 0;
for (int i = 1; i <= m; i++)
{
if (m % i == 0)
{
a[j] = i;
j++;
}
}
return j;
}