我正在尝试分解一个数字并获得每个单独的数字。我试图通过除以 10 的幂直到达到 0 来做到这一点。每次除以 10 时,它都会添加到整数中的数字总数。一旦我得到了总位数,我会将原始数字除以 10 得到位数 - 1,然后减少位数并重复该过程。这一直有效,直到最后一个数字,我得到 4 而不是 6。我尝试过使用不同的数字,但最后一个数字,有时倒数第二个数字是错误的数字。有什么理由这样做吗?如果有任何帮助,我们将不胜感激。
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{
int indx;
int originalDigit = 1234;
int numDigits;
int digit;
int individualDigit;
numDigits = 0;
digit = originalDigit;
while(digit > 0)
{
digit = digit / 10;
numDigits++;
}
printf("%d\n", numDigits);
digit = originalDigit;
while( digit > 0)
{
individualDigit = digit / (int)pow(10, numDigits - 1);
printf("%d ", individualDigit);
digit = digit % (int)pow(10, numDigits - 1);
numDigits--;
}
return 0;
}
当有很好的积分数学方法时,我不会使用
pow
等浮点函数。
一种解决方案是简单地将数字
sprintf
放入缓冲区,然后您可以使用 strlen
获取位数和单个字符来获取数字:
void method1 (int val) {
char buff[50];
sprintf (buff, "%d", val);
printf ("Digit count = %d, digits =", strlen (buff));
for (int i = 0; i < strlen (buff); i++)
printf (" %c", buff[i]);
putchar ('\n');
}
另一种方法是使用 modulo-10 方法将数字加载到数组中,然后反转顺序(通过物理交换或简单地向后处理数组):
void method2 (int val) {
int len, buff[50];
for (len = 0; val > 0; len++, val /= 10)
buff[len] = val % 10;
// Logical swap.
printf ("Digit count = %d, digits =", len);
for (int i = len - 1; i >= 0; i--)
printf (" %d", buff[i]);
putchar ('\n');
}
void method3 (int val) {
int len, buff[50];
for (len = 0; val > 0; len++, val /= 10)
buff[len] = val % 10;
// Pyhsical swap.
for (int i = 0, j = len - 1; i < j; i++, j--) {
int t = buff[i];
buff[i] = buff[j];
buff[j] = t;
}
printf ("Digit count = %d, digits =", len);
for (int i = 0; i < len; i++)
printf (" %d", buff[i]);
putchar ('\n');
}
如果您只需要整数,以下代码片段非常简单:
divider = 10;
while( digit > 0)
{
individualDigit = ((digit % divider) / (divider / 10));
printf("%d ", individualDigit);
digit -= individualDigit * (divider / 10);
divider *= 10;
}