1001.cpp

来自「非常好的C++学习源码,里面包括各种算法的实现,二叉的的前中后序遍历等」· C++ 代码 · 共 94 行

CPP
94
字号
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
	int n,i,j,k,b[1000],c[1000],d[1000],m,t,p,s1,l;
	double s;
	while(cin>>s>>n)
	{
		for (i=0;i<1000;i++)
			d[i]=0;
		l=0;
		s1=int(s*10000+0.1);
		while (s1!=0)
		{
			b[l]=s1%10;
			s1=s1/10;
			l++;
		}
		for (j=0;j<l;j++)
			d[j]=b[j];
		m=l;
		for (i=1;i<=n-1;i++)
		{
			for (j=0;j<300;j++)
				c[j]=0;
			for (j=0;j<l;j++)
				for (k=0;k<m;k++)
					c[j+k]=c[j+k]+b[j] * d[k];
			for (j=0;j<(l+m-1);j++)
				d[j]=c[j];
			for (j=0;j<(l+m-1);j++)
			{
				if (d[j]>=10)
				{
					d[j+1]=d[j+1]+d[j]/10;
					d[j]=d[j]%10;
				}
			}
			for (j=0;j<300;j++)
			{
				p=1;
				for (k=0;k<300;k++)
				{
					if (d[j+k]!=0)
					{
						p=p+1;
					    break;
					}
				}
				if (p==1)
				{
					m=j;
					break;
				}
			}
		}
		p=1;
		for (j=0;j<300;j++)
			if (d[j]!=0)
			{
				t=j;
				break;
			}
		if (m<=4*n)
		{
			cout<<".";
			for (j=4*n-1;j>=t;j--)
				cout<<d[j];
			cout<<endl;
		}
		else
		{
			for (j=m-1;j>=4*n;j--)
				cout<<d[j];
			if (4*n>t)
			{
				cout<<".";
				for (j=4*n-1;j>=t;j--)
					cout<<d[j];
			}
			cout<<endl;
		}
	}
	return 0;
}







⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?