我试图分解一个数字并获得每个数字。我试图通过除以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;
}
答案 0 :(得分:1)
如果有完美的方法可以使用整数数学,我就不会使用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');
}