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