[英]A number formed by every k-th digit of another number in c
Given some natural numbers n and k, my goal is to write a C program that outputs a number formed by every k-th digit of n.给定一些自然数 n 和 k,我的目标是编写一个 C 程序,输出一个由 n 的每个第 k 位数字组成的数字。 I wrote a program as follows:我写了一个程序如下:
#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;
}
My code outputs the same number but partitioned into substrings of length k.我的代码输出相同的数字,但分成长度为 k 的子串。 Why is that and how can I fix it so that I get the number I wanted?为什么会这样,我该如何解决才能得到我想要的号码?
Your logic is too complicated, but if you want to stick to it:你的逻辑太复杂了,但如果你想坚持下去:
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 % (int)pow(10,k)
is the low-order k
digits of n
. n % (int)pow(10,k)
是n
的低位k
位。 If you just want one digit, use n % 10
.如果您只想要一位数字,请使用n % 10
。
Since pow(10, k)
returns a double
, it might not be an exact integer. You should round it to the nearest integer to do proper division.由于pow(10, k)
返回一个double
,它可能不是精确的 integer。您应该将它四舍五入到最接近的 integer 以进行适当的除法。
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]);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.