递归字符串C++编程(1)

问题描述

  最近FJ为他的奶牛们开设了数学分析课,FJ知道若要学好这门课,必须有一个好的三角函数基本功。所以他准备和奶牛们做一个“Sine之舞”的游戏,寓教于乐,提高奶牛们的计算能力。
  不妨设
  An=sin(1–sin(2+sin(3–sin(4+...sin(n))...)
  Sn=(...(A1+n)A2+n-1)A3+...+2)An+1
  FJ想让奶牛们计算Sn的值,请你帮助FJ打印出Sn的完整表达式,以方便奶牛们做题。

输入格式

  仅有一个数:N<201。

输出格式

  请输出相应的表达式Sn,以一个换行符结束。输出中不得含有多余的空格或换行、回车符。

样例输入

3

样例输出

((sin(1)+3)sin(1–sin(2))+2)sin(1–sin(2+sin(3)))+1

c++ Code:

#include<iostream>
#include <sstream>
#include<stdlib.h>
#include<string>
#include<math.h>
using namespace std;
string num2str(double i)
{
        stringstream ss;
        ss<<i;
        return ss.str();
}
string A(int n)
{
	string q;
	if (n==1)
	{
		return "sin(1)";
	}
	else
	{
		q=A(n-1);
		return q.substr(0,q.length()-(n-1))+((n%2)?"+":"-")+"sin("+num2str(n)+")"+q.substr(q.length()-(n-1));
	}
}
string S(int n,bool isnumerical)
{
	string q=(isnumerical?A(1):"A1")+"+"+num2str(n);
	int i;
	for (i=n-1;i>=1;i--)
	{
		q="("+q+")"+(isnumerical?A(n-i+1):("A"+num2str(n-i+1)))+"+"+num2str(i);
	}
	return q;
}
int string2int(string str)
{
	return (int)atof(str.c_str());
}
int str2num(string s)
 {   
        int num;
        stringstream ss(s);
        ss>>num;
        return num;
}
int main()
{
	int N;
	cin>>N;
	cout<<"N="<<N<<endl;
	cout<<"A(N)="<<A(N)<<endl;
	cout<<"S(N)="<<S(N,false)<<endl;
	cout<<"S(N)="<<S(N,true)<<endl;
	return 0;
}


Results:


猜你喜欢

转载自blog.csdn.net/qq_16635325/article/details/50680454