求数字平方和初学者Bug C++; 所以,我最近开始学习C++。此代码试图将每个数字的平方和相加。例如:243:2*2+4*4+3*3=29 int sumOfSquareDigits(int n) //BUG WITH INPUT OF 10, 100, 1000, etc. { int digits = findDigits(n); int number; int remainder; int *allDigits = new int[digits]; for (int i = 0; i < digits; i++) { //assigns digits to array if (i + 1 == digits){ //sees if there is a ones value left allDigits[i] = n; } else { remainder = (n % findPower10(digits - (i + 1))); number = ((n - remainder) / findPower10(digits - (i + 1))); allDigits[i] = number; //records leftmost digit n = n - (allDigits[i] * findPower10(digits - (i + 1))); //gets rid of leftmost number and starts over } } int result = 0; for (int i = 0; i < digits; i++) { //finds sum of squared digits result = result + (allDigits[i] * allDigits[i]); } delete [] allDigits; return result; } int findDigits(int n) //finds out how many digits the number has { int digits = 0; int test; do { digits++; test = findPower10(digits); } while (n > test); return digits; } int findPower10(int n) { //function for calculating powers of 10 int result = 1; for (int i = 0; i < n; i++) result = result * 10; return result; } intsumofsquaredigits(intn)//输入为10、100、1000等的BUG。 { 整数位数=findDigits(n); 整数; 整数余数; 整数*所有数字=新整数[数字]; 对于(int i=0;i=测试);

求数字平方和初学者Bug C++; 所以,我最近开始学习C++。此代码试图将每个数字的平方和相加。例如:243:2*2+4*4+3*3=29 int sumOfSquareDigits(int n) //BUG WITH INPUT OF 10, 100, 1000, etc. { int digits = findDigits(n); int number; int remainder; int *allDigits = new int[digits]; for (int i = 0; i < digits; i++) { //assigns digits to array if (i + 1 == digits){ //sees if there is a ones value left allDigits[i] = n; } else { remainder = (n % findPower10(digits - (i + 1))); number = ((n - remainder) / findPower10(digits - (i + 1))); allDigits[i] = number; //records leftmost digit n = n - (allDigits[i] * findPower10(digits - (i + 1))); //gets rid of leftmost number and starts over } } int result = 0; for (int i = 0; i < digits; i++) { //finds sum of squared digits result = result + (allDigits[i] * allDigits[i]); } delete [] allDigits; return result; } int findDigits(int n) //finds out how many digits the number has { int digits = 0; int test; do { digits++; test = findPower10(digits); } while (n > test); return digits; } int findPower10(int n) { //function for calculating powers of 10 int result = 1; for (int i = 0; i < n; i++) result = result * 10; return result; } intsumofsquaredigits(intn)//输入为10、100、1000等的BUG。 { 整数位数=findDigits(n); 整数; 整数余数; 整数*所有数字=新整数[数字]; 对于(int i=0;i=测试);,c++,C++,在运行代码之后,我发现它(几乎)基本上是有效的。我发现,每当用户输入10、100、1000等值时,它总是返回100。我只想使用iostream头来解决这个问题 对不起,如果我的代码不是太可读或组织!如果我的超长代码有任何快捷方式,也会很有帮助,谢谢 问题出在finddigts函数中。对于值10、100、1000等,它计算数字的个数减去一。这是因为循环中的比较,当n小于或等于test时停止,但在这些情况下n等于test,您应该运行下一个迭代 因此,您应该更改第33行: 致: }而(n>=测试);

在运行代码之后,我发现它(几乎)基本上是有效的。我发现,每当用户输入10、100、1000等值时,它总是返回100。我只想使用iostream头来解决这个问题


对不起,如果我的代码不是太可读或组织!如果我的超长代码有任何快捷方式,也会很有帮助,谢谢

问题出在
finddigts
函数中。对于值10、100、1000等,它计算数字的个数减去一。这是因为循环中的比较,当
n
小于或等于
test
时停止,但在这些情况下
n
等于
test
,您应该运行下一个迭代

因此,您应该更改第33行:

致:

}而(n>=测试);
现在,它应该可以正常工作了。但它不适用于负数(我不知道这是必需的,但下面的解决方案也适用于这种情况)

我想出了一个简单得多的解决方案:

int-sumOfSquareDigits(int-n)
{
//变量以保持平方和的总和
整数和=0;
//这个循环将改变n直到它为零
而(n!=0){
///我们将计算平方的当前数字是最右边的数字,
//所以我们只需要使用mod操作符来得到它的值
int电流=n%10;
//把它的平方加到总和上
总和+=电流*电流;
//将n除以10,这将“删除”n的一位数
n=n/10;
}
回报金额;
}

问题出在
finddigts
函数中。对于值10、100、1000等,它计算数字的个数减去一。这是因为循环中的比较,当
n
小于或等于
test
时停止,但在这些情况下
n
等于
test
,您应该运行下一个迭代

因此,您应该更改第33行:

致:

}而(n>=测试);
现在,它应该可以正常工作了。但它不适用于负数(我不知道这是必需的,但下面的解决方案也适用于这种情况)

我想出了一个简单得多的解决方案:

int-sumOfSquareDigits(int-n)
{
//变量以保持平方和的总和
整数和=0;
//这个循环将改变n直到它为零
而(n!=0){
///我们将计算平方的当前数字是最右边的数字,
//所以我们只需要使用mod操作符来得到它的值
int电流=n%10;
//把它的平方加到总和上
总和+=电流*电流;
//将n除以10,这将“删除”n的一位数
n=n/10;
}
回报金额;
}

我发现这个问题很难解决,我设法将您的代码减少到以下几行:

long long sumOfSquareDigits(long long i) {  
  long long sum(0L);
  do {
    long long r = i % 10;
    sum += (r * r);    
  } while(i /= 10);

  return sum;
}

我还没有完全测试过,但我认为它可以正常工作

我发现问题在于如何将代码缩减到以下几行:

long long sumOfSquareDigits(long long i) {  
  long long sum(0L);
  do {
    long long r = i % 10;
    sum += (r * r);    
  } while(i /= 10);

  return sum;
}

我还没有完全测试过,但我认为它可以正常工作

现在学习使用调试器在将来将是一个很大的帮助。(
余数
应该在某个地方使用,不是吗?如果使用正确的命令行标志,编译器可能会警告您这类事情。)这是一项大量的工作。我认为您应该能够在几行代码中使用while循环、除法、模运算和加法来完成这项工作。现在学习使用调试器在将来会有很大帮助。(
余数
应该在某个地方使用,不是吗?如果使用正确的命令行标志,编译器可能会警告您这类事情。)这是一个很大的工作。我认为你应该能够在几行中使用while循环、除法、模和加法来实现这一点。谢谢!令人惊讶的是,代码的简单性可以达到多大程度!谢谢令人惊讶的是,代码的简单性可以达到多大程度!