我认为我的代码都是正确的,但它不起作用

时间:2017-03-29 18:49:42

标签: c++

我把它编码给我这个:

  

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!)

有什么问题?
它返回错误的值:(

4 个答案:

答案 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++)