re: 剛看到了一道小題,練習了一下 編程之道 2006-04-06 09:49
找到了,用timeval結(jié)構(gòu)可以,呵呵,count_1的效率大約是count_2的7倍。
Please Input A Number:1024
Start count_1:673480 count_1:50025019 End count_1:673780 Time used:300
Start count_2:673786 count_2:50025019 End count_2:675914 Time used:2128
re: 程序設(shè)計試題 編程之道 2006-04-05 16:49
#include
#include
long count_1(long n);
long count_2(long n);
int main(int argc,char *argv[])
{
long n,result_1=0,result_2=0;
while(1)
{
printf("\nPlease Input A Number:");
scanf("%ld",&n);
result_1=count_1(n);
result_2=count_2(n);
printf("\ncount_1:%ld\ncount_2:%ld\n",result_1,result_2);
}
}
long count_1(long n)
{
long i=1;
while(i)
{
if(n>=50025002)
{
n-=5;
i--;
}
else
{
n+=2005;
i++;
}
}
return n;
}
long count_2(long n)
{
long m,tmp;
if(n>=50025002)
m=n-5;
else
{
tmp=count_2(n+2005);
m=count_2(tmp);
}
return m;
}
大概明白了,寫一下
a 0110 0001
A 0100 0001
只有第6位是不一樣的,所以,如果想把小寫轉(zhuǎn)換成大寫,只需要將第6位改成0,也就是-32。這樣直接和
1101 1111
進行與操作,這樣就保證了其他位不變,將第6位變成了0
同樣,如果要將大寫轉(zhuǎn)換成小寫,需要將第6為改為1。
直接和
0010 0000
進行或運算,就可以完成。
還有一個比較更簡單的是直接和
0010 0000
進行異或運算,就ok了