趣味题目 二的1000次方求解

#include<stdio.h>

int main()

{
	int i = 0;
	int j = 0;
	int a[1000];                   //预留1000个元素,从小到大,按个十百千万的顺序一直排列
	for(i = 0; i < 1000;i++)       //除了a[0]为1,其他都是0
	{
		a[i] = 0;
	}
	a[1] = 1;

	for(i = 0; i < 1000;i++)       //完成2的1000次方,每次循环结果都是乘完之后的数字
	{
		for(j = 0;j < 1000;j++)//每个元素都乘2,相当于整体乘2,但是还没有进位
		{
			a[j] *= 2;
		}
		for(j = 0;j < 1000;j++)//完成进位,每一个元素都要通过判断,只要大于9就进位
			if(a[j] > 9)
			{
				a[j] = a[j] % 10;
				a[j + 1]++;
			}
	}
		for(i = 0;i < 1000;i++) //输出模块,因为数组前面还有许多0.毕竟最后的数字肯定没有一千位
		{
			if(a[1000 -i -1] != 0) //出现第一个非零,代表结果数字出现了,跳出,开始printf
			{
				break;
			}
		}
		for(;i < 1000;i++)             //输出从倒数第一个非零开始,因为要继承上面的i,所以不初始化
		{
			printf("%d",a[1000 -i -1]);
		}
		printf("\n");

		return 0;


}

结果如上图。


总结:核心就是通过数组表示结果,每一位数组都是一位,然后倒序输出,乘2就for循环全部乘2,但是别忘了进位,for循环里面加一个if只要该位大于9,就a[j + 1]++。最后别忘了倒序输出就行了。







猜你喜欢

转载自blog.csdn.net/rocky_56x/article/details/79217344