想起被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计算器对比一下
总结:
惟有用诗人屈原的话自勉:路漫漫其修远兮,吾将上下而求索!