c中另一个数的每第k位组成的数
A number formed by every k-th digit of another number in c
给定一些自然数 n 和 k,我的目标是编写一个 C 程序,输出由 n 的每个第 k 位数字组成的数字。我写了一个程序如下:
#include <stdio.h>
#include <math.h>
#define MAX 100
void printDigit(int n, int k)
{
int arr[MAX];
int i = 0;
int j, r;
while (n != 0) {
r = n % (int)pow(10,k);
arr[i] = r;
i++;
n = n / pow(10,k);
}
for (j = i - 1; j > -1; j--) {
printf("%d ", arr[j]);
}
}
int main()
{
int n = 12345678;
int k = 2;
printDigit(n,k);
return 0;
}
我的代码输出相同的数字,但分成长度为 k 的子字符串。为什么会这样,我该如何解决才能得到我想要的号码?
n % (int)pow(10,k)
是n
的低k
位。如果您只想要一个数字,请使用 n % 10
.
因为 pow(10, k)
returns a double
,它可能不是一个精确的整数。您应该将它舍入到最接近的整数以进行正确的除法。
void printDigit(int n, int k)
{
int arr[MAX];
int i = 0;
int j, r;
int divisor = lround(pow(10, k));
while (n != 0) {
r = n % 10;
arr[i] = r;
i++;
n = n / divisor;
}
for (j = i - 1; j > -1; j--) {
printf("%d ", arr[j]);
}
}
你的逻辑太复杂了,如果你想坚持下去:
int intpow(int x, int y)
{
int result = 1;
while(y--) result *= x;
return result;
}
void printDigit(int n, int k)
{
int arr[MAX];
int i = 0;
int j, r, powv;
while (n != 0) {
powv = intpow(10,k -1);
n /= powv;
if(!n) break;
r = n % 10;
arr[i] = r;
i++;
n = n / 10;
}
for (j = i - 1; j > -1; j--) {
printf("%d ", arr[j]);
}
}
给定一些自然数 n 和 k,我的目标是编写一个 C 程序,输出由 n 的每个第 k 位数字组成的数字。我写了一个程序如下:
#include <stdio.h>
#include <math.h>
#define MAX 100
void printDigit(int n, int k)
{
int arr[MAX];
int i = 0;
int j, r;
while (n != 0) {
r = n % (int)pow(10,k);
arr[i] = r;
i++;
n = n / pow(10,k);
}
for (j = i - 1; j > -1; j--) {
printf("%d ", arr[j]);
}
}
int main()
{
int n = 12345678;
int k = 2;
printDigit(n,k);
return 0;
}
我的代码输出相同的数字,但分成长度为 k 的子字符串。为什么会这样,我该如何解决才能得到我想要的号码?
n % (int)pow(10,k)
是n
的低k
位。如果您只想要一个数字,请使用 n % 10
.
因为 pow(10, k)
returns a double
,它可能不是一个精确的整数。您应该将它舍入到最接近的整数以进行正确的除法。
void printDigit(int n, int k)
{
int arr[MAX];
int i = 0;
int j, r;
int divisor = lround(pow(10, k));
while (n != 0) {
r = n % 10;
arr[i] = r;
i++;
n = n / divisor;
}
for (j = i - 1; j > -1; j--) {
printf("%d ", arr[j]);
}
}
你的逻辑太复杂了,如果你想坚持下去:
int intpow(int x, int y)
{
int result = 1;
while(y--) result *= x;
return result;
}
void printDigit(int n, int k)
{
int arr[MAX];
int i = 0;
int j, r, powv;
while (n != 0) {
powv = intpow(10,k -1);
n /= powv;
if(!n) break;
r = n % 10;
arr[i] = r;
i++;
n = n / 10;
}
for (j = i - 1; j > -1; j--) {
printf("%d ", arr[j]);
}
}