C语言编程题,写出程序,谢谢! 题目1大数阶乘 对给定的n(n≤100),计算并输出k!(k

C语言编程题,写出程序,谢谢!题目1大数阶乘对给定的n(n≤100),计算并输出k!(k=1,2…,n)的全部有效数字(因k!的值可能很大,故采用一维数组存储计算结果,参... C语言编程题,写出程序,谢谢!
题目1大数阶乘

对给定的n(n≤100),计算并输出k!(k=1,2…,n)的全部有效数字(因k!的值可能很大,故采用一维数组存储计算结果,参见实例34之思考)。
算法分析:
设数组的每个元素存储k!的一位数字,并约定从低位到高位依次存于数组的弟一个位置、第二个位置……例如,5!=120,在数组a中的存储方式为:a[2]=1,a[1]=2;a[0]=0。此程序中,计算k!采用对已求得的(k—1)!的结果累加k—1次后求出。例如,4!=24,则计算5!对原来的24再累加4次24后得到120。为了控制累加的位数,引入整型变量c用于记录当前(k—1)!的位数。
需要注意的是最高位进位情况的处理方法,因为最高位可能不止一个位数。
此实例分两个模块来解决,一个是通过(k—1)!计算k!。其中,第一个模块(即函数pnext()的N-S图如图2-7所示。

题目2 卡布列克运算

所谓卡布列克运算是指对任意一个四位数,只要它们各个位上的数字不完全相同,就有这样的规律:
(1)把组成这个四位数的四个数字重新生成最大的四位数;
(2)把组成这个四位数的四个数字重新生成最小的四位数(若四个数字中含有0,则此四位数可小于四位);
(3)求出以上两位数之差,得到一个新的四位数。
重复以上过程,总能得到最后的结果是6174。
例如当输入1008后,会输出以下结果:
8100-18=8082
8820-288=8532
8532-2358=6174
试编写卡布列克运算的验证程序。
算法分析
根据题意,此问题可被分成以下三个模块来解决:
(1) 将一个四位数的每一位数字按从大到小(或从小到大)的顺序放到一个一维数组中;
(2) 将(1)中有序数组从左到右(或从右到左)组合成一个最大的四位数;
(3) 将(1)中有序数组从右到左(或从左到右)组合成一个最小的四位数;
展开
 我来答
喵不语__
推荐于2016-05-04 · TA获得超过2.5万个赞
知道大有可为答主
回答量:3281
采纳率:75%
帮助的人:601万
展开全部
#include "iostream"
using namespace std;
int a[1000001];
int main()
{
int n, j, i, t, b;
int len = 1;
cout<<"请输入一个数字:";
cin>>n;
a[1] = 1;
for (i = 2; i <= n; i++)
{
b = 0;
for (j = 1; j <= len; j++)
{
t = a[j] * i + b;
a[j] = t % 10;
b = t / 10;
if (j == len && b != 0)
len++;
}
}
for (i = len; i > 0; i--)
cout<<a[i];
cout<<endl;
}
更多追问追答
追答
这是大数阶乘代码,
望采纳!
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式