gpt4 book ai didi

c - 卡普雷卡数计算失败超过两位数

转载 作者:行者123 更新时间:2023-11-30 19:04:47 28 4
gpt4 key购买 nike

为什么代码不起作用?我无法得到有效的输出。请帮我确定输入是否是 Kaprekar 数字。我认为我把它弄得太复杂了。有什么简单方法的建议吗?

例如:

  • 9 是 Kaprekar 数,因为 9² = 81 & 8+1=9。
  • 297 是 Kaprekar 数,因为 297² = 88209 & 88+209 = 297。以下是代码。

这是代码:

#include <stdio.h>

int main() {
int n, a, temp, length, sum = 0, s, i, rem, temp1, length1, sum1[10], sum2[10];

printf("n");
scanf("%d", &n);

a = n * n;
printf("%d\n", a);

temp = a;
length = 0;

while (temp > 0) {
length++;
temp = temp / 10;
}

temp1 = n;
length1 = 0;

while (temp1 > 0) {
length1++;
temp1 = temp1 / 10;
}

if (length1 == 1) {
for (i = 0; i < length; i++) {
rem = a % 10;
sum = sum + rem;
a = a / 10;
}
if (sum == n) {
printf("Kaprekar number");
} else {
printf("not a kaprekar number");
}
}

if (length1 > 1) {
s = length / 2;

for (i = 0; i < s; i++) {
printf("%d\n", sum1[i]);
}

for (i = s; i < length; i++) {
printf("%d\n", sum2[i]);
}

for (i = 0; i < length; i++) {
sum3[i] = sum1[i] + sum2[i];
}
}
return 0;
}

最佳答案

这是我简化代码的建议,并希望使其更易于调试。

  1. 定义一个返回位数的函数。
  2. 定义一个函数,根据原始数字的位数,将正方形分成多个数字。
  3. 计算正方形各部分的总和,并将其与原始数字进行比较。
<小时/>
int getNumberOfDigits(int n)
{
if ( n == 0 )
{
return 1;
}

int count = 0;
while ( n / 10 > 0 )
{
n /= 10;
++count;
}

return count;
}

void divideSquare(int square, int originalDigitCount, int out[2])
{
int left = square;
int right = 0;
for ( int = 0; i < originalDigitCount; ++i )
{
right = right*10 + left%10;
left /= 10;
}
out[0] = left;
out[1] = right;
}

int main()
{
for (int n = 0; n < 10000; ++n )
{
int square = n * n;
int out[2];
int count = getNumberOfDigits(n);
divideSquare(square, count, out);
if ( out[0] + out[1] == n )
{
printf("%d is a Kaprekar number\n", n);
}
}
}

关于c - 卡普雷卡数计算失败超过两位数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51115555/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com