最小生成元
这个程序为什么不对。#include <iostream>
#include <string>
using namespace std;
int a;
int yuan(int n)
{
string strn;
int res = 0;
strn = to_string(n);
for (int i = 0; i < strn.length(); i++)
{
res = res + strn - '0';
}
return n + res;
}
int main()
{
int n;
cin >> n;
for (int i = 99999; i >=0; i--)
{
a = i;
}
cout << a;
return 0;
}
这个求最小生成元,即如果x加x的各位和等于y,则x是y的最小生成元。 问题出在循环的范围上。在main函数中,循环的范围应该是从0到99999,而不是从99999到0。因为在yuan函数中,当n为1时,它的最小生成元是0,所以a应该等于0。而在当前的代码中,a被赋值为99999,这是不正确的。
修正后的代码如下:
#include <iostream>
#include <string>
using namespace std;
int a;
int yuan(int n)
{
string strn;
int res = 0;
strn = to_string(n);
for (int i = 0; i < strn.length(); i++)
{
res = res + strn[ i] - '0';
}
return n + res;
}
int main()
{
int n;
cin >> n;
for (int i = 0; i < 100000; i++)
{
a = i;
}
cout << a;
return 0;
}
页:
[1]