简体   繁体   English

c中另一个数的每第k位组成的数

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM