想起被W哥拒绝和被S哥无情地忽视,真是很伤心
既学不成国际一流的做壳技术,也学不成国际一流的解密技术,世上还有什么事能让人快乐呢?
从此之后,我便郁郁寡欢,整日在网上闲逛。
一日,我无意间访问到我国著名程序员刘涛涛的blog,逐一阅读其博文之后,深感佩服,让我印象最深的要数“扭曲变换加密”与“哈巴雪山-帐篷事件”,两篇文章让人感受到前辈技术和人格上的魅力。除此之外,我还在另外一篇文章中看到了他出的一道面试题目,引用原文片段如下

为了毕业以后仍然能每天早上吃上一根油条两个鸡蛋,我决定从解此题开始努力学习,在知识的海洋里奋勇遨游了十几个来回之后,我总算是做出了这道题目的基本解法

代码:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
void mystrrev(unsigned char* s);
void add(char *s1,const char *s2);
int main(int argc,char *argv[])
{
const char* szStr = NULL;
const char* locate = NULL;
unsigned char szSum[101];
unsigned char szTemp[101];
if(argc != 2)
return -1;
szStr = argv[1];
memset(szSum,0,101);
while((szStr = strpbrk(szStr,"0123456789")) != NULL)
{
locate = szStr;
while(*locate >= 0x30 && *locate <= 0x39)
++locate;
memset(szTemp,0,101);
strncpy(szTemp,szStr,locate - szStr);
mystrrev(szSum);
mystrrev(szTemp);
add(szSum,szTemp);
mystrrev(szSum);
szStr = (const char*)(locate + 1);
}
printf("the sum is:%s\n",szSum);
system("pause");
return 0;
}
void mystrrev(unsigned char* s)
{
char *p = NULL;
char i = strlen(s);
p = calloc(1,i + 1);
if(p == NULL)
{
printf("strrev:fatal error!\n");
return;
}
while(--i >= 0)
{
*(p++) = *(s + i);
}
p -= strlen(s);
memset(s,0,strlen(s) + 1);
strcpy(s,p);
free(p);
}
void add(unsigned char *s1,const unsigned char *s2)
{
while(*s1 != 0 && *s2 != 0)
{
*s1 = ( ((*s1) - 0x30) + ((*s2) - 0x30) );
if(*s1 >= 10)
{
if(*(s1 + 1) != 0)
*(s1 + 1) = ((*(s1 + 1) - 0x30) + 1) + 0x30;
else
*(s1 + 1) = 0x31;
*s1 %= 10;
}
*s1 += 0x30;
++s1;
++s2;
}
while(*s2 != 0)
*(s1++) = *(s2++);
}
@echo off
test.exe 你54839865486548650468054658847397577599他554238599778899934566666666666666666666999999999999999999999999我8888888888888888888888888888888888888
得到如下的结果

和Google计算器对比一下

总结:

惟有用诗人屈原的话自勉:路漫漫其修远兮,吾将上下而求索!