第五章:基础题目选解。第一部分

本文介绍如何使用高精度算法解决阶乘计算问题,并通过实例演示阶乘精确值的计算过程。此外,还涉及了常量表简化代码、周期串最小周期求解等技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

5.1字符串:

技巧:使用常量表简化代码。

题目描述:

  守在键盘上打字时,稍不注意手会向右错以为,输入一个错位后敲出的字符串,输出本来打字员想打出的句子。

 

这个使用常量数组: char s[]={"qwertyu....."} 等。

 

5.2 Tex括号:

技巧:使用标志变量

 

5.3 周期串:

技巧:标志变量与暴力枚举,从小周期开始进行枚举;

问题描述:

  求解出一个字符串中子串的最小周期。

 

5.4 高精度运算

技巧:在胡溢出的情况下,使用数组来存储整数,模拟手算的方法进行四则运算。

 

5.5 阶乘的精确值:使用的高精度算法:

代码:

#include <stdio.h>
#include <string.h>
#define N 3000
char f[N];//开3000的数组,基本可以进行计算1000以内的阶乘。
//模拟大数阶乘,高精度算法。
int main()
{
    int i,j,n;
    printf("请输入你想要计算阶乘结果的数字:\n");
    while(scanf("%d",&n)!=EOF)
    {
        memset(f,0,sizeof(f));
        f[0]=1;
        for(i=2;i<=n;i++)//从2开始,每次乘以i的值;
        {
            int c=0;
            for(j=0;j<N;j++)
            {
                int s=f[j]*i+c;
                f[j]=s%10;
                c=s/10;
            }
        }
        for(j=N-1;j>=0;j--) if(f[j]) break;//忽略前导0;
        for(i=j;i>=0;i--) printf("%d",f[i]);printf("\n");
    }
    return 0;
}

 

 

 

5.6 6174问题:

问题描述:(一个差不多单纯的模拟题)

基础技巧:冒泡排序

技巧:由于这里数字仅有4位,对于数字num,可以使用数组f[num]是否等于1来快速判断之前是否存在过这个数字。

(这里数组的初始化为0,没出现一个数字num,即将其f[num]改变值为1。)

 

5.7 字母重排

技巧:

  这里体现了预处理的重要性!具体就是在提前输入的若干单词中,输入后即将单词字母排序后再保存下来,可以为之后的计算减少大量工作。

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值