所以我被要求对数字的每一位进行平方,并将它们连接在一起,然后使用C作为数字返回.但由于某些原因,我在将0处理为数字并在我的算法中实现它时遇到了问题.例如:当n=3210987654时,预期为9410816449362516,但得到的是941816449362516.
#include<math.h>
unsigned long long square_digits(unsigned n) {
unsigned long long result = 0;
int k = 0;
int digits = (int)log10(n) + 1;
for (int d = 0; d < digits; d++) {
int digit = n % 10;
int squared = digit * digit;
n /= 10;
if (d == 0) {
result += squared * pow(10, k);
}
else {
if (digit == 0) {
k++;
}
else if (digit < 4) {
k++;
result += squared * pow(10, k);
}
else {
k += 2;
result += squared * pow(10, k);
}
}
}
return result;
}
所以我试着做的是使用一个变量k,它的作用是10的幂,它的作用是根据连接一个平方数字所需的位数.对于第一个数字,我保持简单,因为我没有改变K的值,而对于其他数字,我首先判断数字的平方是否为2位.如果需要,那么每次我都必须增加两次功率,一次增加一位数的正方形.至于数字0,我不能相应地相乘或拼接,我只能通过增加乘方向左移动一步.根据我的假设,这应该是完美的,但这不是正确的,因为它在处理数字中间的0‘S时出现了问题.
例如:对于n=3210987654,预期为9410816449362516,但得到941816449362516