【发布时间】:2017-07-17 18:15:43
【问题描述】:
我想在将给定数字(6 位)加 1 后拆分为 2 个数字(每个数字 3 位),然后将前 3 位数字和后 3 位数字相加并检查总和是否匹配,再次执行该过程,最后返回前三位数字和相等的数字。
我的代码拆分了数字,但最后 3 位数字以某种方式反转(这不是问题,因为我只想要它们的总和)
但是当我尝试对每 3 个数字求和时,问题就来了。
int onceInATram(int x) {
// Complete this function
int n = 0;
int y = 0;
int len = 0;
int digit = 0;
int t1 = n;
int t2 = y;
int reminder1 = 0;
int reminder2 = 0;
int sum1 = 0;
int sum2 = 0;
len = (int) floor(log10(abs(x))) + 1;
do {
n = x + 1; // to add 1 to the number
while ((floor(log10(abs(n)) + 1) > len / 2)) { // split it by half
digit = n % 10;
n = n / 10;
y = (y * 10) + digit;
}
int l = 3;
while (l--) {
reminder1 = t1 % 10;
sum1 = sum1 + reminder1;
t1 = t1 / 10;
reminder2 = t2 % 10;
sum2 = sum2 + reminder2;
t2 = t2 / 10;
}
} while (sum1 != sum2);
//return(printf("%d\n%d\n", n, y)); // for debugging
return printf("%d%d\n", n, y); // '' ''
//return printf("%d\n", sum1); // '' ''
}
int main() {
int x;
scanf("%i", &x);
int result_size;
char* result = (char *) onceInATram(x);
printf("%s\n", result);
return 0;
}
我使用了函数,但似乎没有任何作用!
我的意见: 555555
我的输出:555655 > 与 555556 相同(以 1 递增但最后 3 位反转)。
预期输出:555564(前 3 位数字的总和 == 后 3 位数字)。
【问题讨论】:
-
您能否提供一个具体的示例输入、您得到的输出以及您认为正确的输出?
-
完成! @abelenky
-
aside --
len = (int) floor(log10(abs(x))) + 1;:log10(0)未定义;应该验证用户输入。 -
我可以摆脱这条线。 @大卫保龄球