题目:输入一序列的正实数和幂次(正整数)对,然后打印结果(具体的比这个精细)
这道题是关于大数计算的(大数求幂),从开始建立思路,到写代码、调式到最后被AC以及最终的优化,总共用了差不多一天的时间。开始AC时使用空间500K,时间37MS,最后一次AC空间400K,时间0MS,有很大提高。这主要归功于加大了每次的数据处理量,减少了重计算次数以及降低循环代码量。还有就是在使用了二分递归,避免了重复计算。不好的一点是代码量太大,并且使用了太多的变量。
不管怎么样,为这道题付出了很多想法,后来的一些大的优化主要来自对底层的深入理解,代码的整体实现粒度是很细的,阅读起来可能会有些困难,但很是值得推敲的,具体实现代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void add(char *s1, char *s2);
char *multi(char *s1, char *s2);
char *result(char *s, int n);
int main(void) {
char ch[100];
char *res;
int num, np;
char tem, *temp1, *temp2;
char *chp;
while ( scanf("%s%d", ch, &num) != EOF ) {
chp = ch + strspn(ch, "0"); // 去掉前导0
tem