从键盘输入一个自然数n求n!C语言
#include
int
main()
{
int
i,n,m=1;
printf("请输入所求的阶乘:");
K: scanf("%d",&n);
if(n>1)
{
for(i=n;i>0;i--)
m=m*i;
printf("%d!=%d
",n,m);
}
else
{
printf("你所输入的数据错误!
");
printf("请重新输入:");
goto
K;
}
return
0;
}
不用开新问题了,我已经把原回答修改了,改成你要的字符串运算。
但即使这样,n也不要太大,看我测试数据就知道了。
代码原理:n!就是循环累计乘法,多位数字符串与多位数字符串相乘和人算法一样,就是其中一个字符串每一位数字和另一个字符串数字相乘,同时所有乘积移位累加。
注意:我写的所有字符串运算函数,没有写字符串验证,如果你想单独把函数拿出来用,记得写个输入验证,不要把非数字的字符串传进去。
#include #include #include #include void meError(void *p);//内存申请失败char *addByStr(char *str1,char *str2);char *inversion(char *str);//倒置字符串char *multByStr1(char *str1,char c2);//多位数字符串与单位数字符串相乘char *multByStr2(char *str1,char *str2);//多位数字符串相乘char *p10ByStr(char *str,int n);//字符串数字乘n个10char *num2Str(int n);//数字转字符串int main(){ int n,i,len,cnt=0; char *nStr=NULL; while(1) { nStr=(char *)malloc(sizeof(char)*2); meError(nStr); nStr[0]='1',nStr[1]=0; printf("输入一个自然数n,求n!
"); scanf("%d",&n); for(i=1;i=0;i--) if(nStr[i]=='0') cnt++; printf("结果包含%d个0
",cnt); free(nStr); nStr=NULL; } return 0;}char *num2Str(int n)//数字转字符串{ int i=0,len=1; char *str=NULL,*strSave=NULL; while(n) { if(str==NULL) { str=(char *)malloc(sizeof(char)*2); meError(str); } else { strSave=(char *)realloc(str,sizeof(char)*(len+1)); meError(strSave); str=strSave; strSave=NULL; } str[i]=n%10+'0'; str[i+1]=0; i++; len++; n=n/10; } inversion(str); return str;}char *p10ByStr(char *str,int n)//字符串数字乘n个10,注意:str必须是动态申请内存!!{ int len=strlen(str),i; char *p=NULL,*strSave=NULL; if(n>0) { strSave=realloc(str,sizeof(char)*(len+1+n)); meError(strSave); str=strSave; p=&str[len]; for(i=0;i=0;i--) { c2=str2[i]; addStrs[j++]=multByStr1(str1,c2);//这里addStrs存储的是str1和str2每一位的乘积 } //--------sum0和sum1交替,为了及时释放内存------- sum0=(char *)malloc(sizeof(char)*2); meError(sum0); sum0[0]='0',sum0[1]=0;; for(i=0;i0) *p=c+'0'; break; } i--; } inversion(mulStr); return mulStr;}char *addByStr(char *str1,char *str2){ int len1=strlen(str1),len2=strlen(str2),maxSize,i=len1-1,j=len2-1,a,b,c=0; char *addStr=NULL,*p=NULL; if(len1>len2)//多留两位,一位给结束符号,一位给进位 maxSize=len1+2; else maxSize=len2+2; addStr=(char *)malloc(sizeof(char)*maxSize); meError(addStr); memset(addStr,0,sizeof(char)*maxSize); p=addStr; while(1) { if(i0) *p=c+'0'; break; } i--; j--; } //--------------数组倒置------------------ inversion(addStr); return addStr;}char *inversion(char *str)//倒置字符串{ char *p=str,*pd=&str[strlen(str)-1],cs; while(p<pd) { cs=*p; *p=*pd; *pd=cs; p++; pd--; } return str;}void meError(void *p)//内存申请失败{ if(p==NULL) { printf("
异常:内存申请失败!回车结束程序!
"); while(getch()!=''); exit(0); }}
int main()
{
int n, ans, i;
while(scanf("%d",&n)==1)
{
ans = 1;
for(i=2;i<=n;i++)
ans *= i;
printf("%d! = %d\n",n,ans);
}
}
用C语言编写程序从键盘输入一个正整数数n,输出n!
直接输出计算阶乘的C语言代码及解释:要编写一个C语言程序,从键盘输入一个正整数n并计算其阶乘(n!),可以通过两种方法实现:递归和循环。首先,我们来看递归的方法:c include \/\/ 递归函数计算阶乘 int factorial(int n) { if (n <= 1)return 1;else return n * factorial(n - 1);} int...
C语言 自守数。任意输入一个自然数,判断是否自守数并输出
if (str[len-1] == '0' + n) { printf("%d yes %d*%d=%d\\n", n, n, n, square);} else { printf("%d no %d*%d=%d\\n", n, n, n, square);} return 0;} 在这里,你首先使用 scanf 函数从标准输入中读取一个自然数 n。然后,你计算 n 的平方 square,并将其转换为字符...
C语言:输入自然数n,将n分解成质因子连乘的的形式输出。
i=2; scanf("%d", &n); printf("%d=", n); while (i<=n){ if (n%i == 0){ printf("%d", i); if(n != i){ printf("*"); } n \/= i; }else{ i+=1; } } printf("\\n"); return 0;} ...
用C语言编写程序从键盘输入一个正整数数n,输出n!
include <stdio.h>int Func(int n){if(n < 2)return 1;else return n*Func(n-1);} void main(){int n =0,m=0;printf("请输入一个正整数:")scanf("%d",&n);m=Func(n);printf("%d!=%d\\n",n,m);} 在以上程序代码中,Func()为递归函数,主函数main()中接收键盘输入整数...
c语言中, n!是什么意思?
在C语言中,`n!` 表示自然数 `n` 的阶乘。阶乘是一个数学概念,指的是从 `1` 乘到 `n` 的所有正整数的乘积。例如,`5!` 就是 `5 * 4 * 3 * 2 * 1`,结果为 `120`。在C语言中,计算 `n!` 通常会用到循环或者递归来实现。以下是一个使用循环计算 `n!` 的示例代码:```c ...
用C语言编写程序从键盘输入一个正整数数n,输出n,是什么情况?
void main(){ int a;char str1[200];printf("Please input a integer: "); scanf("%d", &a);itoa(a, str1, 10);printf("The length of integer=%d", strlen(str1));} C语言实现如下:include<stdio.h> void main(){ int i,j,k,n;scanf("%d",&n); \/\/输入一个正整数n f...
C语言编程实现:输入正整数n,求1!+2!+3!+…+n!的值。
include <stdio.h> int main(){ int i,n,t=1,sum=0;printf("输入正整数n:");scanf("%d",&n);for(i=1;i<=n;i++){ t*=i;sum+=t;} printf("结果为:%d",sum);return 0;}
c语言编程 输入正整数n,求n是几位数
当你输入一个正整数n时,你需要编写一个C语言程序来确定n是几位数。这可以通过计算n的位数来实现。具体来说,你可以使用循环来将n除以10,直到n小于10为止。每次除以10时,计数器加1,最终计数器的值就是n的位数。以下是一个简单的C语言程序,可以实现这个功能:```include <stdio.h> int main(...
c语言 由键盘输入一个正整数n,求n有多少个不同的正整数因子 描述 由...
include<stdio.h> int main(void){ long unsigned int num,i,cnt=0;printf("请输入一个正整数!\\n");scanf("%lu",&num);for(i=1;i<=num;i++){ if(num%i==0) cnt++;} printf("此数共有%lu个不同正整数因子。\\n",cnt);return 0;} ...
使用C语言输入一个正整数n,输出1+2!+3!+...n!
include<stdio.h> int main(){ int i,sum=0,t,s,n;printf("请输入一个整数:");\/\/提示语句 scanf("%d",&n);\/\/输入n的值 for(i=1;i<=n;i++) \/\/第一次循环,就是数字1到n 的递增 { s=1;\/\/每次阶乘都要初始化s=1 for(t=1;t<=i;t++)\/\/循环里的循环 ,求每个i的...