C语言计算2的100次方

 
一般的计算用c语言中自带的数据类型和一些math函数库就可以完成,但有时候一些技术要求数值更加精确或者超出c语言的计算范围,这就需要使用某些算法来辅助计算了。

//计算2的100次方
/*问题分析:
*使用c语言自带整数数据类型已经无法满足要求;
*需要用100位的数据类型来计算,在c语言中,int是8位,long是32位;
*2的10次方大约是10的3次方;所以2的100次方大约是10的31次方,即为31位的十进制数;
*我的算法是把结果放在长度为35的int数组,每个数据在0-9之间,一个值代表一位,arr[0]为个位;
*因为是受算盘计算方式的启发,所以我称作此算法为“算筹算法”;
*一般方法是每次都遍历整个数组;优化方式是初始遍历数组的5位,随后幂每增加10,需要遍历的数组增加3位。
**/
#include<stdio.h>
#define N 33//设定结果的总位数

//一般算法实现
void getResult(){
	int i,j;
	int t = 0;//用于标记是否有进位
	int arr[N];

	arr[0] = 1;
	for(i = 1;i < N;i++){
		arr[i] = 0;
	}

	//算法实现过程
	for(i = 1;i <= 100;i++){
		t = 0;
		for(j = 0;j < N;j++){
			//计算本位数据
			arr[j] = arr[j] * 2 + t;
			t = 0;
			//计算下一位数据
			if(arr[j] > 9){
				arr[j] %= 10;
				t = 1;
			}
		}
	}

	//结果输出
	printf("一般算法——2的100次方计算结果为:n");
	for(i = N - 1;i >= 0;i--){
		if(i != 0 && i % 3 == 0){
			printf("%d,",arr[i]);
		}else{
			printf("%d",arr[i]);
		}
	}
	printf("n");

}

//优化算法实现
void getResultPro(){
	int i,j,n;
	int t = 0;//用于标记是否有进位
	int arr[N];

	arr[0] = 1;
	for(i = 1;i < N;i++){
		arr[i] = 0;
	}

	//算法实现过程
	for(i = 1;i <= 100;i++){
		t = 0;
		n = (i / 10  + 1) * 3 + 2;
		for(j = 0;j < n;j++){
			//计算本位数据
			arr[j] = arr[j] * 2 + t;
			t = 0;
			//计算下一位数据
			if(arr[j] > 9){
				arr[j] %= 10;
				t = 1;
			}
		}
	}

	//结果输出
	printf("优化算法——2的100次方计算结果为:n");
	for(i = N - 1;i >= 0;i--){
		if(i != 0 && i % 3 == 0){
			printf("%d,",arr[i]);
		}else{
			printf("%d",arr[i]);
		}
	}
	printf("n");

}

void main(){
	//一般算法
	getResult();
	getResultPro();
}

 
 

寻找优秀的IT公司

在我看来,一个优秀的IT公司,应该满足以下几点要求:
1.要有良好的行业前景。这点可以从企业定位,以及当前的项目课题来判断。一个优秀的IT企业是不会固步自封的。IT行业本身就是知识变更很快的行业,这就要求他的从业人员和相关企业能够适应这种快速变更。优秀的IT企业总能具有前瞻性,并且有这方面的实施项目。这几天看的几家企业是关于智能交通的和国家电网配套服务的,这是一个挺前端的课题,虽然,有的项目还比较基础,但也领先与不少企业半步。
2.要有不错的氛围。小公司可能还没有形成自己的文化氛围,但也要做到员工之间,上下级之间沟通没有障碍。客户第一,企业第二,善待员工。不求把员工放在前面,但求能做到善待员工,不管是大企业还是刚刚起步的小企业,员工忠诚度是至关重要的。积极进取的小组氛围,适当的福利待遇(甚至只是口头奖励),团队里的归属感,这些足够留下不少忠实的员工。
以上是本人的浅显看法,如有不足,还望指正。

人人网CEO致信——你是“极客”吗?

你是“极客”吗?什么是极客?
刚开始工作的时候,我对世界和社会的了解不如现在深刻。但是回想起来,我歪打正着地走了一条相对正确的道路,这条道路是巴菲特曾经给斯坦福商学院的毕业生们指出的一条道路,那就是:要和一群极客为伍。
从创办人人到现在,我始终自信地觉得,我是在与一群极客共同生活和战斗着。
那么,什么是极客和极客精神?
在我看来,如果你:
不满现状,梦想有一个非常精彩的人生;
自信且具有智力上的优越感;
崇尚平等,不迷信权威,
拥有创新的精神,持续追求更加卓越的解决方案;
那么,你就有可能成为真正的极客!
我们发现,极客有两种: 一种是偏执狂, 一种聪明绝顶。
公司成功需要这两种人,他们都是极客。 他们要么通过超凡的努力,要么通过超人的智慧,开拓新领域,创造新世界。
这个世界正是因为有了极客和极客精神,才变成现在这个样子。
数百万年前,第一个决定站起身行走的家伙在同伴看来一定是一个异类,但正是他的勇气,让今天的人类在这个星球上看起来如此的与众不同!
同样,从第一幅绘画、第一个文字,到人类懂得记录思想传播信息;从第一个公式、第一张图纸,到人类能够驾驭能量操纵机器;从第一封电报、第一个字节,到人类可以享受互联网生活,所有这一切,如果没有极客和极客精神,我们或许还只是荒漠中的一群狒狒或者猴子。
在人人,我们认为:很少有什么事情是完美的,包括我们自己也不够完美。 但是,我们痛恨平庸和因循守旧:我们希望通过我们用心创造的每一件事,改变互联网,改变世界,让我们的世界趋于完美。
让那些完美的人加入那些“完美的”大公司吧:他们的使命将是帮助他们的雇主继续维护既有的商业秩序和份额,继续统治商业世界和互联网上的每一寸土地。
让我们这样一群不完美但具有极客精神的人,一起去创造更好的互联网产品,把完美的互联网体验带给更多的互联网用户,为互联网和世界的未来,作出我们独特的,杰出的,极客一样的,强大的贡献!

迎接挑战,就是抓住机遇

自兼职后,接触的东西对我而言几乎都是全新的东西。以前,讨厌做销售类的工作,一直以为我天生没有做销售的天赋,只有技术和研发才是我的最爱;以前,没想到做网站可以这么容易,总以为好的程序员必须要推敲每行代码;以前,只喜欢可视化操作系统,对于dos,linux不感冒。

后来,由于工作需要,不得不去接触这些,毕竟干得就是这个。当然,销售这个工作对我来说是最大的挑战。从刚开始战战兢兢,把每个人都当成大爷,到后来轻车熟路,能比较熟练的处理各种刁钻问题,心态是最重要的。当把心态放平,对待各种客户,自然就不成问题。你会发现,不少用户还是不错的,自己的服务能得到用户们的认可,还是挺有成就感的。因此,也不再那么排斥销售和售后工作。当然,有时顾客也会不太理智,不过也可以理解,毕竟是对事不对人,自己也不必把所有问题都揽在自己身上,要学会看清问题本质。

售后的一些技术工作,也让我对软件行业有了更加全面的认识,不再简单局限在某个技术,而是整个行业。张仪能“合纵连横”七国,是因为心里装有七国。同样道理,以后即便从程序员做起,却能着眼于整个行业。

近日,孙哥给安排了seo的工作,对我来说是全新的东西。之前也打算学习过,终因各种原因未能真正实施。今假此机会,望能学以致用。

我们这一代已经开始登上历史的舞台,运动场是第一个舞台,往日的小将今已辉煌,不久,各行各业,都将充斥着90后的身影!直至在政坛叱咤风云!

珍惜每次挑战,它将造就以后的你!For eagle!

用C语言,求解两个正整数(至少一个为合数)的最大公约数和最小公倍数

对于如何求解两个正整数的最大公约数和最小公倍数,在小学我们就接触了短除法,不过这种方法不易于转变为普适的算法。直到高中时,数学课本中有了算法的章节,其中就有了两个经典的算法——“辗转相除法”和“更相减损术”(如果忘记了,请自己百度下,也可以通过下面的例子总结规律。)——这两个是不错的求解最大公约数的方法,而且易于用计算机语言实现!(这是我在大学接触编程后才发现的。)
下面为6和10求最大公约数2的过程:

辗转相除法:
10 = 1 * 6 + 4;
6  = 1 * 4 + 2;
4  = 2 * 2 + 0;
2为6和10的最大公约数。 更相减损术: 10 – 6 = 4;
6  – 4 = 2;
4  – 2 = 2;
2为6和10的最大公约数。

只要求解出了最大公约数,求解最小公倍数将变得十分简单,可以使用一下公式:

MAX_yue * MIN_bei = A * B;
其中,A、B为两个正整数,MAX_yue为A和B的最大公约数,MIN_bei为A和B的最小公倍数。

下面将是用C语言实现“求解两个正整数(这里限定为:至少有一个数为合数。原因很简单,如果两个值都为素数,那么这两个值一定互为素数,如果使用下面的算法计算,效率会比较低。当然,可以先判断这两个数是否为素数,如果都为素数就不再计算,直接输出结果!)的最大公约数和最小公倍数”算法的源码,仅供参考!

//求两个正整数的最大公约数和最小公倍数
#include<stdio.h>
#include<stdlib.h>	//此库包含清屏函数:system("CLS");

//用辗转相除发求两个数的最大公约数
int get_MAX_yue_zhanzhuan(int num1,int num2){
	int a = num1,b = num2;
	int MAX_yue;
	int t;	//t为中间变量,一是用于数据交换,而是用于存放临时结果

	//确保a大于b
	if(a < b){
		t = a;
		a = b;
		b = t;
	}

	//辗转相除法算法核心代码
	t = a % b;
	while(t != 0){
		a = b;
		b = t;
		t = a % b;
	}

	printf("使用“辗转相除法”计算,%d和%d的最大公约数为:%dn",num1,num2,b);

	return b;
}

//有更相减损术求两个数的最大公约数
int get_MAX_yue_gengxiang(int num1,int num2){
	int a = num1,b = num2;
	int MAX_yue;
	int t;	//t为容器变量

	//确保a大于b
	if(a < b){
		t = a;
		a = b;
		b = t;
	}

	//更相减损术算法核心代码
	t = a - b;
	while(t != 0){
		a = b >= t ? b : t;
		b = b < t ? b : t;
		t = a - b;
	}

	printf("使用“更相减损术”计算,%d和%d的最大公约数为:%dn",num1,num2,b);
	return b;
}

//求两个数的最小公倍数
void get_MIN_bei(int num1,int num2,int MAX_yue){
	int MIN_bei;

	MIN_bei = num1 * num2 / MAX_yue;

	printf("%d和%d的最小公倍数为:%dn",num1,num2,MIN_bei);
}

void main(){
	int num1 = 1,num2 = 1,MAX_yue;
	int con = 0;	//作为选项控制变量的容器
	int has_yue = 0;//判断是否已经计算过最大公约数,是为1,否则为0

	//启动系统
	while(1){
		//控制台展示
		printf("***********************************************************n");
		printf("录入(重新录入)数据,请键入:0n");
		printf("使用“辗转相除法”计算最大公约数,请键入:1n");
		printf("使用“更相减损术”计算最大公约数,请键入:2n");
		printf("计算最小公倍数,请键入:3n");
		printf("退出系统,请键入:4n");
		printf("***********************************************************n");
		printf("控制码为:");

		//获取控制指令
		scanf("%d",&con);
		system("CLS");

		//实现控制
		if(con < 0 || con > 4){
			printf("控制码无效,请重新输入!n");
			continue;
		}

		switch(con){
			case 0 :
				printf("请输入第一个正整数(大于2的正整数):");
				scanf("%d",&num1);
				printf("请输入第二个正整数(大于2的正整数):");
				scanf("%d",&num2);
				has_yue = 0;
				break;
			case 1 :
				if(num1 == 1 || num2 == 1){
					printf("还未录入数据,请先执行0n");	
				}else{
					MAX_yue = get_MAX_yue_zhanzhuan(num1,num2);
					has_yue = 1;
				}
				break;
			case 2 :
				if(num1 == 1 || num2 == 1){
					printf("还未录入数据,请先执行0n");	
				}else{
					MAX_yue = get_MAX_yue_gengxiang(num1,num2);
					has_yue = 1;
				}
				break;
			case 3 :
				if(has_yue == 1){
					get_MIN_bei(num1,num2,MAX_yue);
				}else{
					printf("还未计算最大公约数,请先执行1或者2n");
				}
				break;
			default :
				break;
		}

		if(con == 4){
			break;
		}
	}

}