1. 字符串转数字
字符‘0’对应ASCII码48,‘0’转化成整形数字0,int i=ch-48;同理char ch=i+48;
题目:将字符串“326”,“+326”,“-326”转换成对应的数字输出:326,+326,-326
#include<stdio.h>
#include<string.h>
int StringInt(const char *str)
{
int i,length,value,flag;
length=strlen(str);
flag=1;
value=*(str+length-1)-48; //个位
for(i=length-2; i>=0; --i)
{
if(*(str+i)=='+')
break;
else if(*(str+i)=='-')
value=-value;
else
{
flag *= 10;
value+=(*(str+i)-48)*flag;
}
}
return value;
}
int main(void)
{
printf("%d\n",StringInt("326"));
printf("%d\n",StringInt("+326"));
printf("%d\n",StringInt("-326"));
return 0;
}
2.斐波那契数列
f(n)=f(n-1)+f(n-2),n>=2. 考察递归,先计算f(0),f(1)最后计算f(n),时间复杂度最低为O(n)
2.1 循环
#include<stdio.h>
int main(void)
{
int i,result_two,result_zero=0,result_one=1, n=50;
for(i=2;i<=n;++i)
{
result_two=result_one+result_zero;
result_zero=result_one;
result_one=result_two;
printf("%d",result_two);
}
return 0;
}
2.2 递归
long long Fibonacci(unsigned int n)
{
if(n>=2)
return Fibonacci(n-1)+Fibonacci(n-2);
else if(n==1)
return 1;
else
return 0;
}
递归简洁,但当递归层级加深时,容易发生栈溢出。
3.字符串压缩——压缩连续重复出现的字符
题目:输入”aabbcc“ 输出”abc“。 输入”abcdef“ 输出”abcdef“
#include<stdio.h>
#include<string.h>
void StrZip(char *pInputStr, int StrLength, char *pOutputStr)
{
int i,j;
bool hash[26]={0};
for(int i=0,j=0; i<StrLength;)
{
if(hash[pInputStr[i]-'a']==false)
{
hash[pInputStr[i]-'a']=true;
pOutputStr[j++]=pInputStr[i++];
}else
++i;
}
pOutputStr[j]='\0';
}
int main(void)
{
char pInputStr[20],pOutputStr[20];
int StrLength;
while(scanf("%s",pInputStr) != EOF)
{
StrLength=strlen(pInputStr);
StrZip(pInputStr,StrLength,pOutputStr);
puts(pOutputStr);
}
return 0;
}
上述代码在VS2010经验证运行通过!后继相关请查阅 华为历年机试题型总结系列(二)