
程序如下:
#include "stdioh"
int main(void)
{
int i;
int acc=1;//用于存放阶乘
printf ("请输入一个整数i=");
scanf ("%d",&i);
for(;i>0;i--)
{
acc=i;
}
printf("该数的阶乘为acc=%d\n",acc);
return 0;
}
运用for循环来求阶乘。
运行结果:
如求十的阶乘
python的字符串类型有一个属性isdigit可以判断是否为数字假设设置了一个变量a,则选择把a转换成字符串,再判断代码如下:a=123print(str(a)isdigit())如果变量a是数字,则返回True,否则返回False
var a,i,s:integer;
function fen(n:integer):integer;
var i:integer;
begin
i:=2;
while (n mod i<>0)and(i<=n) do i:=i+1;
if (n<>1) and (i<=n) then begin write('+',i);s:=s+i;fen:=fen(n div i);end;
end;
begin
readln(a);
i:=2;
while a mod i<>0 do i:=i+1;
write(i);
s:=i;
fen(a div i);
writeln('=',s);
end
#include <stdioh>
#include <stdlibh>
#define stack_init_size 100
#define stackincrement 10
typedef struct
{
int base;
int top;
int stacksize;
}sqstack;
int initstack(sqstack s)
{
s->base=(int )malloc(stack_init_sizesizeof(int));
if(!s->base)
exit(-1);
s->top=s->base;
s->stacksize=stack_init_size;
return 1;
}
int push(sqstack s,int e)
{
if(s->top-s->base>=s->stacksize)
{
s->base=(int )realloc(s->base,(s->stacksize+stackincrement)sizeof(int));
if(!s->base)
exit(-1);
s->top=s->base+s->stacksize;
s->stacksize+=stackincrement;
}
s->top++=e;
return 1;
}
int pop(sqstack s,int e,int i)
{
if(s->top==s->base)
return -1;
else
{
e=--s->top;
printf("%d",e);
}
return 1;
}
int stackempty(sqstack s)
{
if(s->top==0)
return 1;
else
return 0;
}
void main()
{
int n,i,e=0;
sqstack s;
initstack(&s);
printf("输入要转换的十进制数:\n");
scanf("%d",&n);
printf("输入要转换进制(2或8或16):\n");
scanf("%d",&i);
printf("%d转换为%d进制的结果为:\n",n,i);
while(n)
{
push(&s,n%i);
n=n/i;
}
while(!stackempty(&s))
pop(&s,e,i);
}
这是我写进制转换,可以把十进制的书转换成2,8,16进制,但是转换16进制时有点小问题,不影响二进制的,用栈写的不知道你写过没
思路:求一个正整数n的位数可以先定义一个变量num,并初始化为0,依次把该整数n除以10,直到其为0为止,并且每除一次10,变量num的个数就自加1,最后num的值就是该整数n的位数。
参考代码:
#include <stdioh>int main()
{
int n,num=0;
scanf("%d",&n);
while(n){
num++;
n/=10;
}
printf("%d\n",num);
return 0;
}
/
输出:
123456
6
/
可以用YALMIP工具箱解整数规划
定义变量:
sqdvar()实型
intvar()整型
binvar()0-1型
设定目标函数 :
f=目标函数
设定限定条件:
F=set(限定条件)
多个限定条件用加号相连:
F=set(限定条件)+set(限定条件1)+set(限定条件2)……
求解: solvesdp(F,f)
这里解得是F条件下目标函数f的最小值,要求最大值f前面加个负号
求解之后查看数值 :
double(f) double(变量)
intvar(m,n):生成整数型变量;
sdpvar(m,n):生产变量;
solvesdp(F,f):求解最优解(最小值),其中F为约束条件(用set连接),f为目标函数
double:显示求解的答案
有个例子:
已知非线性整数规划为:
Max z=x1^2+x2^2+3x3^2+4x4^2+2x5^2-8x1-2x2-3x3-x4-2x5
st
0<=xi<=99(i=1,2,,5)
x1+x2+x3+x4+x5<=400
x1+2x2+2x3+x4+6x5<=800
2x1+x2+6x3<=800
x3+x4+5x5<=200
matlab中输入
>> x=intvar(1,5);
f=[1 1 3 4 2](x'^2)-[8 2 3 1 2]x';F=set(0<=x<=99);
F=F+set([1 1 1 1 1]x'<=400)+set([1 2 2 1 6]x'<=800)+set(2x(1)+x(2)+6x(3)<=800);
F=F+set(x(3)+x(4)+5x(5)<=200);solvesdp(F,-f);
max=double(f)
sx=double(x)
Starting YALMIP integer branch & bound
Lower solver : fmincon-standard
Upper solver : rounder
Max iterations : 300
Warning : The relaxed problem may be nonconvex This means
that the branching process not is guaranteed to find a
globally optimal solution, since the lower bound can be
invalid Hence, do not trust the bound or the gap
Node Upper Gap(%) Lower Open
1 : -8020E+004 003 -8025E+004 2
2 : -8020E+004 003 -8025E+004 1
3 : -8020E+004 000 -8020E+004 2
+ 3 Finishing Cost: -80199
max =
80199
sx =
53 99 99 99 0
#include<stdioh>
int sort1(int a[],int n)//参数n数组长度
{
int t;
for(int i=0;i<n-1;i++)
for(int j=i+1;j<n;j++)
if(a[i]<a[j])
{
t=a[i];
a[i]=a[j];
a[j]=t;
}
}
int sort2(int a[],int n,int x)//参数n数组长度,x要插入的数
{
a[n]=x;
int t;
for(int i=0;i<n;i++)
for(int j=i+1;j<n+1;j++)
if(a[i]<a[j])
{
t=a[i];
a[i]=a[j];
a[j]=t;
}
}
int main()
{
int n,a[111],x;
scanf("%d",&n);
for(int i=0;i<n;i++)
scanf("%d",&a[i]);//输入n个数
scanf("%d",&x);//要插入的数
sort1(a,n);//调用函数选择排序
for(int i=0;i<n;i++)
printf("%d ",a[i]);//输出第一次排序的结果
printf("\n");
sort2(a,n,x);//调用函数先插入一个数,然后排序
for(int i=0;i<n+1;i++)
printf("%d ",a[i]); //输出第二次排序的结果
return 0;
}
以上就是关于C语言:编写一个程序,要求输入一个整数,输出其阶乘全部的内容,包括:C语言:编写一个程序,要求输入一个整数,输出其阶乘、python 程序 求助 编写确定输入整数是否为整数的程序(、分解正整数的程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)