arr[1] = 1;
public int fn(int n) {
return n<=0?0:(n==1?1:(arr[n]!=0?arr[n]:(arr[n] = fn(n-1)+fn(n-2))));
}
上面的代码是假的,题目在下面
编写一个程序,这个程序要处理命令行参数,也就是在运行程序的命令中,除了程序名之外,还需要传递给程序一些参数。需要用main 函数的第二种形式来处理:int main(int argc, char *argv).用这种方式编写一个程序,程序运行的命令行中,除了本身的程序名称以外,还需要输入一个自然数参数,按回车建运行程序后,程序打印这个自然数的质数分解。不要忘记把字符串参数转换成整数类型的数据。
已知代数定理,任何大于1的自然数都可以写成质数的乘积。例如4=2*2,15=3*5,18=2*3*3,如果这个自然数就是质数,则不用分解。
提示:把质数放在数组中,用n去除这个数组中的质数,如果可以整除,则继续找质数来除,直到把n变成1为止。把可以整除n的质数放在一个数组中,最后循环打印。

#include <stdio.h>
#include<string.h>
int main(int argc, char *argv[])
{
int i,n=0,f=1;
char s[50];
scanf("%s",s);
if(s[0]==' ')
{
printf("The program needs at least one integer parameter to run");
f=0;
}
else
{
for(i=0; s[i]!='\0'; i++)
{
if(s[i]>='0'&&s[i]<='9')
{
n=n*10+s[i]-'0';
printf("%d \n",n);
}
else
{
f=0;
printf("The parameter has to be an integer format");
break;
}
}
}
if(f==1)
{
printf("%d=",n);
for(int i=2; i<n; i++)
{
while(n>i)//进入循环n的值会变所以要再次判断ni的值大小情况
{
if(n%i==0)
{
printf("%d*",i);
n/=i;//商
}
else
{
break;//不符合直接终止循环
}
}
}
printf("%d",n);//这里是把最后一个值输出
printf("\n");
}
}
#include <stdio.h>
#include <stdlib.h>
typedef unsigned long DWORD;
//函数decomp_integer对n分解素因数,分解后的素数存入facArr数组,并返回因子的个数
int decomp_integer( DWORD n, DWORD facArr[])
{
DWORD fac; //n的可能的一个因子
int count;
if (n<4) //4以内的数,不需要分解
{
facArr[0]=n; return 1;
}
count=0;
//下面的while循环为2试出n,直到2不是n的因子为止
while ( (n & 1)==0) // 这里判断偶数用 (n &1)==0,这比(n % 2)==0更快
{
facArr[count++]=2; n/=2;
}
fac=3; //用3到sqrt(n)之间的奇数试除
while (fac*fac<=n) // fac*fac <= n
{
while (n % fac==0)
{
facArr[count++]=fac;
n /= fac;
}
fac+=2;
}
if (n==1)
return count;
facArr[count++]=n;
return count;
}
int main(int argc, char* argv[])
{
DWORD n,facArray[32];
int i,count;
printf("Please input unsigned integer:");
scanf("%u",&n);
count=decomp_integer(n,facArray);
printf("%u=%u",n,facArray[0]);
for (i=1;i<count;i++)
printf("*%d",facArray[i]);
printf("\n");
return 0;
}