编程Java求任意一个正整数的阶乘

编程Java求任意一个正整数的阶乘
编程Java求任意一个正整数的阶乘

1、输入一个正整数,并求出它的阶乘

While循环

import java.util.Scanner;

public class NumberLayer {

/**

* @param args

*/

public static void main(String[] args) {

System.out.print("请输入一个正整数:");

Scanner ScNumber=new Scanner(System.in);

int num=ScNumber.nextInt();

System.out.println();

int layer=num;

int i=1;

//标签,用来标记下一次符合要求的循环从这个标签开始

loop:while(true){

layer=layer*(num-i);

i++;

if(i==num)

break loop;

}

System.out.println(num+"的阶乘为:"+layer);

}

}

2、for循环

import java.util.Scanner;

public class NumberLayer {

/**

* @param args

*/

public static void main(String[] args) {

System.out.print("请输入一个正整数:");

Scanner ScNumber=new Scanner(System.in);

int num=ScNumber.nextInt();

System.out.println();

int layer = num;

for(int i=1;i

layer=layer*(num-i);

}

System.out.println(num+"的阶乘为:"+layer);

}

}

计算N的阶乘

北华航天工业学院 课程设计报告(论文) 设计课题:计算N的阶乘 专业班级: 学生姓名: 指导教师: 设计时间:2010年12月16日

北华航天工业学院电子工程系 微机原理与接口技术课程设计任务书 指导教师:刘金梅教研室主任: 2010年12 月18 日

内容摘要 本次课程设计编写计算N!的程序。数值N由键盘输入,结果在屏幕上输出,通过编制一个阶乘计算程序,了解怎样在汇编语言一级上实现高级语言中的数学函数。其难点在于随着N的增大,其结果远非寄存器所能容纳。这就必须把结果放在一个内存缓冲区中。然而乘法运算只限于两个字相乘,因此要确定好算法,依次从缓冲区中取数,进行两字相乘,并将DX中的高16位积作为产生的进位。 索引关键词:N的阶乘汇编语言内存缓冲区

目录 序言————————————————————5 正文————————————————————5 一、程序算法————————————————-—-5 二、源程序—————————————————-—-6 三、程序运行与调试—————————————-—11 四、N的阶乘程序流动图——————————-—-—11 心得体会——————————————————13 参考文献——————————————————13

序言 本文是关于微型计算机原理写文件课程设计。编写程序,将内存区域中用调试程序(DEBUG)设置好的一连串数据(以Ctrl+z为结束符)做为一个文件存入磁盘,文件名为DATA.ASM。内存区域的段地址和偏移地址在程序中输入。 随着计算机的高速发展,微型计算机已经应用到各个领域,微型计算机原理应用技术已经成为电子信息的核心产业。 微型计算机原理是计算机科学与技术、通讯工程、电气工程、机电工程的核心课程。 通过这次课程设计,是我们更好地理解了课程中所学的理论知识,并把实际问题转化为理论知识,学会如何把学到的知识用于解决实际问题,培养我们的动手能力。 正文 一、程序算法 阶乘的定义为N!=N(N-1)(N-2)……2,从左至右依次计算,结果保存在缓冲区BUF中。缓冲区BUF按结果由高到低依次排列。程序首先将BP初始化为N,N 不等于0或1则将N送入BUF缓冲区最低字节单元中。然后使BP为N-1,以后BP依次减1,直到变化为1为止。每次让BP与BUF中的字节单元按由低到高的次序相乘。低位结果AX仍保存在相应的BUF字节单元中,高位结果DX则送到进位字单元CY中,作为高字相乘时从低字来的进位,初始化CY为0.计算结果的长度随着乘积运算而不断增长。由字单元LEN指示。LEN单元初始化为1。当最高字单元与BP相乘时。若DX不为0,则结果长度要扩展。

输入正整数n,计算n的阶乘c++实验报告

实验五 一、实验内容 1、掌握3种循环结构:while,do-while,for的区别与联系,以及他们之间相互转换的方法,并能正确使用他们. 2,掌握与循环语句相关的break语句和continue语句的使用方法. 二、实验目的 1、掌握3种循环结构:while,do-while,for的区别与联系,以及他们之间相互转换的方法,并能正确使用他们. 2,掌握与循环语句相关的break语句和continue语句的使用方法. 三、实验步骤 实践教程例题1 1.输入正整数n,计算n的阶乘. 2.实践教程例2 输入若干字符,统计其中数字字符.白字符和其它字符的个数,输入EOF结束. 3、实践教程例3 N个人围坐成一圈,从1开始顺序编号;游戏开始,从第一个人开始由1到m循环报数,报到m的人退出圈外,问最后留下的那个人原来的序号。 4`书2.3 设计程序将输入的百分制成绩转换为五分制输出,90分以上为5分,80~89为4分,70~79为3分,60~69为两分,60分以下为1分。 书2.5 编译打印如下图形 * * * * * * * * * * * * * * * * * * * * * * * * *

4、书2.7 输入n,求1!+2!+3!+…+n!。 四、实验数据及处理结果 实践教程例1 #include using namespace std; int main (){ int n,i; double result=0; cout<<"请输入正整数:"<>n; if(n<1){ cout<<"输入错误!"<

阶乘排列组合公式计算

阶乘排列组合公式计算 加法原理:做一件事,完成它可以有N类加法,在第一类办法中有M1种不同的方法,在第二类办法中有M2种不同的方法,……,在第N类办法中有MN种不同的方法。那么完成这件事共有N=M1+M2+...+MN 种不同的方法。即一次性完成的用加法原理。 乘法原理:做一件事,完成它需要分成N个步骤,做第一步有M1种不同的方法,做第二步有M2种不同的方法,……,做第N步有MN种不同的方法,那么完成这件事共有 N=M1×M2×... ×MN 种不同的方法。即二次以上完成的用乘法原理。 排列:从N个不同元素中,任取M(M<=N)个元素,按照一定的顺序排成一列,叫做从N个不同元素中取出M个元素的一个排列。 排列数:从N个不同元素中取出M(M<=N)个元素的所有排列的个数,叫做从N个不同元素中取出M个元素的排列数。记作:Pmn 排列数公式:Pmn =n(n-1)(n-2)...(n-m+1) 全排列:N个不同元素全部取出的一个排列,叫做N个不同元素的一个全排列。 自然数1到N的连乘积,叫做N的阶乘。记作:n! 。0!=1。 全排列公式:Pnn =n! 排列数公式还可写成:Pmn = n!/(n-m)! 组合:从N个不同元素中,任取M(M<=N)个元素并成一组,叫做从N个不同元素中取出M个元素的一个组合。 排列与元素的顺序有关,组合与元素的顺序无关。 组合数:从N个不同元素中取出M(M<=N)个元素的所有组合的个数,叫做从N个不同元素中取出M个元素的组合数。记作:Cmn 组合数公式:Cmn = Pmn / Pmm = n(n-1)(n-2)...(n-m+1)/m! = n!/m!/(n-m)! 组合性质1:Cmn = Cn-mn ( C0n =1) 组合性质2:Cmn+1 = Cmn + Cm-1n

用汇编语言计算N阶乘(0到FFFFH)

一、设计题目 编写计算N!的程序(数值N由键盘输入,结果在屏幕上输出。N的范围为0-65535,即刚好能被一个16位寄存器容纳)。 二、开发目的 由于当N值较大时(N>10),N的阶乘计算很繁琐并且计算容易出错。 所以可以编写计算N!的程序,利用计算机强大的计算能力计算N!。这不仅能节省繁琐计算的时间,而且得到的N!的积比起手工算的要准确。 三、设计方案 N的阶乘为1*2*3……(N-1)*N,N的范围为(0000H—FFFFH),N!以字为单位存在一个或几个定义的数据段中。 若已算到(n-1)!,假如它占4个字的空间,接下来它乘以n的原理,如图1所示。

图1 (n-1)!* n的原理 因此计算N!的算法可以这样编写,当前n!的值为被乘数,内容存在str2中,单位为字,n+1的值为乘数,存在str1中,单位也为字。被乘数从str2首地址中内容开始与乘数相乘,得到32位的积,它的低16位覆盖掉当前被乘数所在存储空间的内容。接着str2下一个字的内容与乘数相乘,也得到32位的积,前一个积的高16位与现在积的低16位相加,它们的和覆盖掉当前被乘数所在存储空间的内容,若它们的和有进位,把进位加到现在积的高16位。直到把str2中内容乘完。然后乘数增1,循环上面的内容。 直到执行完(N-1)!*N 输入的N为4位16进制数,输出也为16进制数。 四、程序流程图

五、程序清单 data1 segment input1 db 'please input the number :','$' input2 db 10,?,10 dup(?) ;输入的16进制数 error db 'Out of range','$' output1 db 'The answer is 1','$' output2 db 'The answer is :','$' str1 dw 100 dup(?) ;保存1—N(后一个数覆盖前一个数)str2 dw 7000h dup(?) ;N!乘积的值(1) p dw 100 dup(?) ;上一个乘积的高16位 data1 ends data2 segment str3 dw 7fffh dup(?) ;N!乘积的值(2) data2 ends code segment assume cs:code,ds:data1,es:data2 org 100h ;程序从偏移地址100h开始执行 start: mov ax,data1 ;程序初始化 mov ds,ax mov ax,data2 mov es,ax ;初始化结束 mov ah,9 lea dx,input1 int 21h

递归程序设计 求N阶乘

(一)实验名称 递归程序设计求N阶乘 (二)实验内容和要求 设计一个汇编程序完成y=n!的计算。 要求:(1)能够根据用户输入的n值计算其阶乘,结果以十进制数显示; (2)基于递归程序结构,模块划分合理,具有清晰的入口和出口。(三)实验目的 (1)感受和学习递归程序的设计方法、技巧,完成递归程序设计 (2)学会运用堆栈传递参数的方法和技巧 (3)进一步感受和学习汇编语言程序设计的方法、技巧和调试过程(四)实验日期、时间和地点 时间:2010年11月22日 地点:微机高级实验室 (五)实验环境(说明实验用的软硬件环境及调试软件) 使用masm for windows (六)实验步骤(只写主要操作步骤,要简明扼要,还应该画出程序流程图或实验电路的具体连接图)

(七)实验结果(经调试通过的源程序的所有代码,应包含必要的说明文字)DATAS SEGMENT OPE DW 0,0,0,0 RESULT DB 16 DUP(0),'H',0DH,0AH,0AH,'$' NUM DB 3,0,3 DUP(0) MESS1 DB'Please input N(key Enter to quit):',0DH,0AH,'$' ERR_MESS DB'Error number,try again!',0DH,0AH,0AH,'$' FUNC DB 0,0,'!','=','$' DATAS ENDS STACKS SEGMENT STACK DW 1000 DUP(?) STACKS ENDS CODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKS DS_STR MACRO BUF ;显示字符串的宏 PUSH DX PUSH AX LEA DX,BUF MOV AH,09H INT 21H POP AX POP DX ENDM ;—————————————————————————————————— ————

n的阶乘程序报告

HUNAN UNIVERSITY 程序设计训练报告 题目求n! 学生姓名 学生学号 专业班级 学院名称 指导老师 2013 年 7 月 11 日

目录 第一部分程序功能简介 (3) 第二部分本人完成的主要工作 (3) 第三部分设计方案 (4) (一)设计分析 (4) (二)模块的功能及程序说明 (5) (三)核心源程序模块 (7) (四)核心算法流程图 (8) (五)操作方法简介 (9) (六)实验结果 (9) (七)设计体会 (10) 第四部分附录 ....................... 错误!未定义书签。 (一)程序中主要变量的功能说明........ 错误!未定义书签。 (二)源程序代码...................... 错误!未定义书签。

第一部分程序功能简介 该程序是求一个大数n的阶乘(n!),n的值范围从1~100之间变化。输出结果从右往左每四个数之间用一个“,”隔开。 第二部分本人完成的主要工作 刚开始,我尝试着通过递归函数(如下)将100!的结果算出 结果发现无法得到正确结果(100的阶乘输出为0),询问后知道由于100的阶乘结果太大,用长字符串也会溢出导致无法显示,所以只能将阶乘后结果的个、十、百、千...位依次赋数给数组a[200]来解决这一问题。 数组a[200]的引入也让n阶乘结果的位数昭然若揭,又使用for循环使输出结果从右往左每四个数之间用一个“,”隔开。 最终设计出一个程序求一个大正整数数的阶乘(n!),n的值范围从1~100之间变化(输出结果从右往左每四个数之间用一个“,”隔开)。然后对程序进行编译,运行,并不断完善细节,不断优化。

高中数学的阶乘公式大全

高中数学的阶乘公式大全 阶乘(factorial)是基斯顿卡曼(Christian Kramp, 1760 1826)于1808年发明的运算符号。阶乘,也是数学里的一种术语。阶乘只有计算方法,没有简便公式的,只能硬算。以下是小编整理的关于阶乘的相关公式大全,希望能方便大家。 例如所要求的数是4,则阶乘式是1234,得到的积是24,24就是4的阶乘。例如所要求的数是6,则阶乘式是1236,得到的积是720,720就是6的阶乘。例如所要求的数是n,则阶乘式是123n,设得到的积是x,x就是n的阶乘。 任何大于1的自然数n阶乘表示方法: n!=123n 或 n!=n(n-1)! n的双阶乘: 当n为奇数时表示不大于n的所有奇数的乘积 如:7!!=1357 当n为偶数时表示不大于n的所有偶数的乘积(除0外) 如:8!!=2468 小于0的整数-n的阶乘表示: (-n)!= 1 / (n+1)! 以下列出0至20的阶乘:

0!=1,注意(0的阶乘是存在的) 1!=1, 2!=2, 3!=6, 4!=24, 5!=120, 6!=720, 7!=5,040, 8!=40,320 9!=362,880 10!=3,628,800 11!=39,916,800 12!=479,001,600 13!=6,227,020,800 14!=87,178,291,200 15!=1,307,674,368,000 16!=20,922,789,888,000 17!=355,687,428,096,000 18!=6,402,373,705,728,000 19!=121,645,100,408,832,000 20!=2,432,902,008,176,640,000 另外,数学家定义,0!=1,所以0!=1!

汇编--N阶乘

一、实验目的 1. 掌握子程序的设计方法; 2. 掌握递归子程序的设计思想; 3. 体会堆栈操作在子程序嵌套中的重要作用。 二、实验原理及基本技术路线图(方框原理图) 一个子程序作为调用程序去调用另一子程序,这种关系称为子程序嵌套。由于子程序嵌套对堆栈的使用很频繁,因此还要确保堆栈有足够空间,并要注意堆栈的正确状态,这包括CALL、RET、RET N、PUSH、POP、INT、IRET等与堆栈操作有关指令的正确使用。 在子程序嵌套的情况下,如果一个子程序调用的子程序就是它自身,这样的子程序称为递归子程序。显然递归调用是子程序嵌套的一种特殊情况。使用递归算法往往能设计出效率较高的程序。 设计递归子程序时,必须保证每一次后继调用都不能破坏它上一次调用时所生成的参数和中间结果,并且该过程不会修改它本身。这就意味着当使用汇编语言设计递归子程序时,必须考虑每一次调用都应该把它的参数、寄存器和所有的中间结果保存到不同的存储区域。最好的办法是利用堆栈来存储这些信息,一次调用所保存的信息称为一帧。递归调用要使用大量的堆栈空间,一定要保证堆栈足够大,而且也要保证堆栈的正确使用,避免死机等不可预料的情况发生。 求N!算法流程图:

三、所用仪器、材料(设备名称、型号、规格等) 1. 操作系统平台:Windows Server 2003 2. 汇编环境:Microsoft MASM 5.0 3. 文本编辑器:记事本 四、实验方法、步骤 1. 将MASM5.0的文件置于C:\assembly\目录下;

2. 将masm.exe和link.exe所在目录(C:\assembly\MASM5)添加到Path环境变量中; 3.在C:\assembly\下新建一个JC.asm文件,打开JC.asm,输入汇编程序代码; 4. 运行一个命令行窗口,将当前目录切换到C:\assembly\,然后输入命令:masm JC.asm [Enter],来汇编程序,根据汇编结果查看程序代码是否有语法错误,如有,则更正保存后重新汇编,直至没有错误为止,此时会生成JC.obj文件; 5. 输入命令:link JC.obj [Enter],观察输出结果,如果没有错误,则生成JC.exe; 6. 输入命令:debug JC.exe [Enter],调试程序,并记录运行过程; 7. 完成实验报告。 五、实验过程原始记录(数据、图表、计算等) 1. 将C:\assembly\MASM5目录添加到Path环境变量中: 2. 新建名为JC.asm的文件,输入汇编程序代码:

c语言题目(求阶乘)

求阶乘 1. 该fun函数的功能是求10的阶乘。 1) #include 2) long fun ( int n) 3) {if (___1___) 4) return (n*fun(___2___)); 5) else if ( ___3___) 6) return 1;} 第一处:n>1 第二处:n-1· 第三处:n==1 解析:从第2、4行看到了函数名,函数体中又出现了函数的调用,则是递归。我们知道:n!=n*(n-1)! 这就是一个递归的表达式,写成函数就是fun(n)=n*fun(n-1)。因此,4行处填写n-1。又:1!=1 故3,5行就好填了。因此答案是n>1 n-1 n==1。还有0!=1 故,还可填写:n>0 n-1 n==0 注意:3 5行的条件是相反的,这也是if与else条件的互斥性。 2. 程序的功能是计算s=1!+2!+3!+……+n! 1) long fun(int n) 2) { int i; 3) long s; 4) s=___1___; 5) for (i=1; i<=n; i++) 6) s=___2___; 7) return s; 8) } 9) main() 10) { long s; 11) int k,n; 12) scanf("%d",&n); 13) s=___3___; 14) for (k=1; k<=n; k++) 15) s=___4___; 16) printf("%ld\n", s); 17) } 第一处:1 第二处:s*i 第三处:0

第四处:s+fun(k) 解析:首先,搞清楚函数fun、main各自的功能。 Fun是求一个数的阶乘,我们知道:n!=1*2*3*…*n 同时要死记住:求积,积的初值一般等于1。故fun中s是用来存放积的,其初值等于1;求阶乘是连乘,故s=s*i Main是求和,记住:和的初值一般等于0. 两个函数中的局部变量s的作用是不同的。Main中的s是存放和的。 最后:注意一些变量的类型。 阶乘是求积,积的增长速度是比较快的,为防止溢出,fun的返回值类型是long。输出中ld 是输出长整数。 3. 请补全main函数,该函数的功能是: 求1+2!+3!+…+N!的和。 1) main() 2) {int i,n; 3) long s=0,t=1; 4) //clrscr(); 5) printf("\nInput n:\n"); 6) scanf("%d",___1___); 7) for(i=1;i<=n;i++) 8) { 9) t=___2___; 10) s=___3___; 11) } 12) printf("1!+2!+3!...+%d!=%ld\n",n,s); 13) } 第一处:&n 第二处:t*i 第三处:s+t 解析:求前n项的阶乘之和。这里没有使用子函数。 我们知道:5!=5*4!。即需要利用前一个数的阶乘,还有就是替换。 从第3行可知:s存放和,t存放积。 输入n ,记住应是&n。 i是循环变量。 记住:填空后,手工地将循环执行几次,检验是否正确。 求和、平均值 1. 请补全main函数,该函数的功能是:从键盘输入一个长整数,如果这个数是负数,则取它的的绝对值,并显示出来。

n的阶乘汇编语言

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;宏定义 print_str macro x;宏定义输出字符串 lea dx,x mov ah,9 int 21h endm ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; DATAS SEGMENT ;此处输入数据段代码 n dw ?;存放该数 flag dw 0;判断是否输入为非数字 str1 db 'input the number:$' str2 db '!=$' str3 db 0ah,0dh,'again?(enter means stop,others means continue):$' str4 db '-------------------------------the max num is 8!--------------------------------',0ah,0dh,'$' error db 0ah,0dh,'not a num!$' enter1 db 0ah,0dh,'$' DATAS ENDS STACKS SEGMENT ;此处输入堆栈段代码 dw 20 dup(?) STACKS ENDS CODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKS START: MOV AX,DATAS MOV DS,AX ;此处输入代码段代码 print_str str4 begin1: print_str str1 call input;将输入的数赋给n cmp flag,0 jne again1 mov dx,0 mov ax,n call output print_str str2 mov dx,0 mov ax,1 mov bx,n

计算N的阶乘

北华航天工业学院课程设计报告(论文) 设计课题:计算N的阶乘 专业班级: 学生姓名: 指导教师: 设计时间: 2010年12月16日 北华航天工业学院电子工程系 微机原理与接口技术课程设计任务书

指导教师:刘金梅教研室主 任: 2010年 12 月 18 日 内容摘要 本次课程设计编写计算N!的程序。数值N由键盘输入,结果在屏幕上输出,通过编制一个阶乘计算程序,了解怎样在汇编语言一级上实现高级语言中的数学函数。其难点在于随着N的增大,其结果远非寄存器所能容纳。这就必须把结果放在一个内存缓冲区中。然而乘法运算只限于两个字相乘,因此要确定好算法,依次从缓冲区中取数,进行两字相乘,并将DX中的高 16位积作为产生的进位。 索引关键词: N的阶乘汇编语言内存缓冲区 目录 序言————————————————————5 正文————————————————————5 一、程序算法————————————————-—-5 二、源程序—————————————————-—-6 三、程序运行与调试—————————————-—11

四、N的阶乘程序流动图——————————-—-—11 心得体会——————————————————13 参考文献——————————————————13 序言 本文是关于微型计算机原理写文件课程设计。编写程序,将内存区域中用调试程序(DEBUG)设置好的一连串数据(以Ctrl+z为结束符)做为一个文件存入磁盘,文件名为DATA.ASM。内存区域的段地址和偏移地址在程序中输入。 随着计算机的高速发展,微型计算机已经应用到各个领域,微型计算机原理应用技术已经成为电子信息的核心产业。 微型计算机原理是计算机科学与技术、通讯工程、电气工程、机电工程的核心课程。 通过这次课程设计,是我们更好地理解了课程中所学的理论知识,并把实际问题转化为理论知识,学会如何把学到的知识用于解决实际问题,培养我们的动手能力。 正文 一、程序算法 阶乘的定义为N!=N(N-1)(N-2)……2,从左至右依次计算,结果保存在缓冲区BUF中。缓冲区BUF按结果由高到低依次排列。程序首先将BP初始化为N,N不等于0或1则将N送入BUF缓冲区最低字节单元中。然后使BP为N-1,以后BP依次减1,直到变化为1为止。每次让BP与BUF中的字节单元按由低到高的次序相乘。低位结果AX仍保存在相应的BUF字节单元中,高位结果DX则送到进位字单元

高精度计算n阶乘的c语言源代码和解释

高精度计算大数阶乘的c语言源代码和解释关键词:高精度,大数,阶乘,C,输入的容错处理, 内容介绍:利用高精度计算n阶乘的c语言源代码及其解释,其中还包括一些在C语言中常用的简单编程习惯和技巧,非常适合C语言初学者借鉴,如果好好的把程序调试一遍会对初学者很大的启发。程序中没有用到指针,结构体,共用体等内容,但运用了预编译,头文件,数组等等知识,特别是对getchar()进行输入容错的运用,并有详细的解释! 算法简介:高精度计算n的阶乘其实是高精度大整数乘法的应用,其核心思想就是把计算结果每一位上的数字保存到一个数组成员中,例如:把567保存至数组中,保存结果应该是result[0] =7;result[1] =6;result[2] =5。把整个数组看成一个数字,这个数字和一个数相乘的时候,需要每一位都和这个乘数进行相乘运算还需要把前一位的进位加上。算法如下:int 结果= result[x] * 乘数+ 进位;每一位的计算结果有了,把这个结果的个位数拿出来放到这个数组元素上:result[x] = 结果%10;接下来的工作就是计算出进位:进位= 结果/ 10;这样一位一位的把整个数组计算一遍,最后可能还有进位,用同样的方法,把进位的数值拆成单个数字,放到相应的数组元素中。最后从后往前输出结果。 getchar()使用说明:getchar()有一个int型的返回值.当程序调用getchar()时.程序就等着用户按键.用户输入的字符被存放在键盘缓冲区中.直到用户按回车为止(回车字符也放在缓冲区中).当 用户键入回车之后, getchar()才开始从stdio流中每次读入一个字符. getchar()函数的返回值是用户输入的第一个字符的ASCII码,如出错返回-1,且将用户输入的字符回显到屏幕.如用户在按回车之前输入了不止一个字符,其他字符会保留在键盘缓存区中,等待后续getchar()调用读取.也就是说,后续的getchar()调用不会等待用户按键,而直接读取缓冲区中的字符,直到缓冲区中的字符读完为后, 才等待用户按键. getch()与getchar()基本功能相同,差别是getch()直接从键盘获取键值,不等待用户按回车,只要用户按一个键, getch()就立刻返回, getch()返回值是用户输入的ASCII码,出错返回-1.输入的字符不会回显在屏幕上. getch()函数常用于程序调试中,在调试时,在关键位置显示有关的结果以待查看,然后用getch()函数暂停程序运行,当按任意键后程序继续运行. 下面是用高精度计算n阶乘的c语言源代码:(还附有正整数输入的容错处理函数)程序特点:程序使用了数组的方法,虽然效率不高,但适合初学者学习。程序在VC++6.0,VC++2010测试通过。程序1使用了一个大数组,程序2使用了4个数组组合在一起,其实程序2完全是锻炼初学者的程序分析能力而已。由于系统限制,程序1中当把HEAD_M 设为250000(不能超过该数)时,可以计算不要大于50000的阶乘。程序2不能HEAD_M不能超过70000,由此可知其实用多数组是无意义的! 程序1: //本程序适合学习c语言的初学者调试学习,程序中没有用到指针,结构体,共用体等内容//本来下面的代码是一个头文件,文件名是:headself.h 里面只有一个输入正整数的函数。//把自己经常用的一些变量,函数等等放入自编的头文件是一个很好的习惯。 /*begin包含头文件********************/ #include

求n的阶乘(用数组表示)

#include void QiuWeiShu(int *pointer,int n) { int WeiShu=0,YuShu=0,Shang=n; do { n=Shang; WeiShu++; *(pointer+WeiShu)=n%10; }while((Shang=n/10)!=0); *pointer=WeiShu; } void main() { /*int n=12; int a[10]={0}; int *p=&a[0]; QiuWeiShu(p,n); for(int i=a[0];i>=1;i--) printf("%d ",a[i]); printf("\n%d\n",a[0]);*///用于测试求位数函数的正确性 int n=121; int ArrChengJi[1000]={0}; int ArrChengJi_WeiShu=0; int ArrChengShu[1000]={0}; int ArrChengShu_WeiShu=0; int temp[1000]={0};//用于存放乘数与每位乘数的和,作为一次乘数;在每位数与每位数相乘时作为乘数的临时变量 int MeiWeiChengJi=0;//用于存放每位与每位之间的的乘积,例如372*371中的第二位与第二位的乘积为7*7=49,然后将49数组化,见下 int ArrMeiWeiChengJi[1000]={0};//每次仅用其中的两位,作为每位与每位之间的的乘积的数组化表示 4 9 int *ArrChengJi_Pointer=&ArrChengJi[0];//指向乘积(ArrChengJi[])的指针,只作为求位数时参数使用 int *ArrChengShu_Pointer=&ArrChengShu[0];//指向乘数(ArrChengShu[])的指针,只作为求位数时参数使用 printf("一开始n的值为:\t%d\n",n);/////////////////////////////////////////////////////////////////////////////// QiuWeiShu(ArrChengJi_Pointer,n);//将n(作为乘积)数组化。数组化值的排序为(654321)ArrChengJi_WeiShu=ArrChengJi[0]; printf("n=%d\t作为初始乘积\n",n );/////////////////////////////////////////////////////////////////////////////// printf("n\t=%d数组化后的位数为:%d\n",n,ArrChengJi_WeiShu);///////////////////////////////////////////////////////////////////////////////

递归求n的阶乘

#include #define N 6 void MatrixChain(int p[N+1], int n, int m[N+1][N+1], int s[N+1][N+1]) { int i,j,r,k,t; for(i=1;i<=n;i++)m[i][i]=0; for(r=2;r<=n;r++) for(i=1;i<=n-r+1;i++) { j=i+r-1; m[i][j]=m[i+1][j]+p[i-1]*p[i]*p[j]; s[i][j]=i; for(k=i+1;k

相关主题
相关文档
最新文档