我把它编码给我这个:
1 +(1/2!)+(1/3!)+ ... +(1 / n!)
if(n <10)
#include <iostream>
using namespace std;
int main() {
int n;
float factn=1,m,sum;
cout<<"enter n\n";
cin>>n;
if(n<10&&n>=0){
do{
factn=factn*n;
m=1/factn;
sum=sum+m;
n--;
}while(n>=1);
cout<<sum;
}
else{
cout<<"error!\n";
}
return 0;
}
此代码必须显示:
(n <10)1 +(1/2!)+(1/3!)+ ... +(1 / n!)
有什么问题?
它返回错误的值:(
答案 0 :(得分:2)
代码中存在两个问题。首先,package com.aaron.waller.mrpolitik;
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.design.widget.BottomNavigationView;
import android.support.v7.app.AppCompatActivity;
import android.view.MenuItem;
import android.widget.TextView;
import com.aaron.waller.mrpolitik.tabs.KommentareFragment;
public class MainActivity extends AppCompatActivity {
private TextView mTextMessage;
private BottomNavigationView.OnNavigationItemSelectedListener mOnNavigationItemSelectedListener
= new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()) {
case R.id.navigation_home:
mTextMessage.setText(R.string.title_home);
Intent fragen = new Intent(MainActivity.this, KommentareFragment.class);
startActivity(fragen);
case R.id.navigation_dashboard:
mTextMessage.setText(R.string.title_dashboard);
case R.id.navigation_notifications:
mTextMessage.setText(R.string.title_notifications);
}
return true;
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mTextMessage = (TextView) findViewById(R.id.message);
BottomNavigationView navigation = (BottomNavigationView) findViewById(R.id.navigation);
navigation.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener);
}
}
未初始化,因此无论结果如何都没有任何意义。其次,循环走错了路。要计算连续的阶乘,它必须以1开始,然后移动到2,然后移动到3等;此循环从sum
开始,然后移至n
,然后移至n-1
等。将n-2
循环更改为如下所示:
do... while
答案 1 :(得分:0)
您尚未在开头初始化sum = 0。变量sum有一个随机值,存储在Ram中存储器中该位置的位置。
答案 2 :(得分:0)
花点时间修复格式。除了使代码变得漂亮和可读之外,它通常会将您的想法集中在程序的结构和逻辑上。在这种情况下,你可能会发现公式实现的问题。
如果输入的值正确,cin可以给你状态。还有更多,如果你想重复输入,即应该清除状态。 您的公式可以使用for()循环,使用局部变量来实现。你使用哪种类型的循环并不重要,你可以使用直接声明和使用,如果你愿意,只是for()允许一些声明和语句包含在它的&#34;标题&#34;:< / p>
#include <iostream>
using std::cin;
using std::cout;
int main()
{
int n;
cout << "enter n\n";
bool res = cin >> n; // false if input was incorrectly parsed
if (res)
res = (n<10) && (n>=0);
if( res )
{
float sum = 1; // starting value for sum
for( int k = 1, j = 1; k < n; k++)
{
j = j * (j + 1); // j accumulates factorial
sum = sum + 1.f / j;
}
cout<< sum << "\n";
}
else
{
cout<<"error!\n";
}
return 0;
}
实际上,通过使用指数函数,有办法计算没有周期的阶乘。
答案 3 :(得分:0)
您可以使用
循环简单
for (int i = 0; i < n; i++)