C 中的分解数加法

Decomposing Number Addition in C

我想创建一个分解数字的程序,假设 n = 123 预期结果是

100 + 20 + 3

如果n = 103,预期输出应该只有

100 + 3

有什么简单的方法可以做到吗?没有很多 if else 语句?我试过在网上搜索,但找不到我想要的 C 语言输出。

如果可能的话,我希望这可以用 <100,000,000,000 的任何数字来完成,谢谢!

这是我到目前为止尝试过的...

#include<stdio.h>

int main(){

  int n;
  int mod=0;
  int ten=0;
  int hun=0;
  scanf("%d",&n);
  
  
  if(n<10){
    printf("%d ",n);
  }
  else if(n<100){   
    ten = 10*(n/10);    
    mod = n - ten ;     
    printf("%d + %d",ten,mod);      
  }
  else if(n<1000){
    hun = 100*(n/100);      
    mod = n - hun ; 
    ten = 10*(mod/10);
    mod = n % (hun+ten) ;   
    printf("%d + %d + %d",hun,ten,mod);     
  } 


}

使用递归。对于大整数,根据您的要求将 int 更改为 long / long long

#include <stdio.h>
#include <math.h>

void func(int n) {

    // base condition
    if (n == 0) {
        return;
    }

    int k = 0, first = 0, val = n;

    // for every number get the no of digits to calculate the first part of the number (ex : 123 => no of digits = 3 and first part = 100)
    while (n) {
        if (n < 10) {
            first = n;
            break;
        }
        n = n/10;
        k++;
   }
  
  // printing
  k = (int)(first * (pow(10,k)));
  printf("%d", k);

  if (val - k) {
    printf(" + ");

    // recursing for the remaining part
    func(val - k);
  }

}

int main(){
  int n;
  scanf("%d",&n);
  func(n);
}

注: 编译代码时不要忘记 link -lm(因为您正在使用 math.h

首先你需要计算位数。知道位数后,您可以找到每个数字的幂。然后你必须在每次迭代中用它的最高幂对你的数字取模,以便转储最高数字。

#include <stdio.h>
#include <math.h>

int main() {
    long n = 0;
    int digits = 0;
    scanf("%lu", &n);
    long cpy = n;
    // Count numbers of digits
    while (cpy) {
        cpy /= 10;
        digits++;
    }
    printf("Digits = %d\n", digits);
    while (digits) {
        long power = pow(10, digits - 1);
        long comp = n / power;
        n = n % power;
        printf("%lu\n", comp * power);
        digits--;
    }
    return 1;
}

为了 link math.h 库,您必须使用以下内容进行编译:

gcc <name of your C file> -lm

注意:我使用 long 作为类型,因为我不知道你考虑的数字有多大,如果你想让它使用更大的数字,你甚至可以把它 long long

这可以递归地完成,从十个 10,000,000,000 的最大幂开始;在每次递归调用中,您通过将前一个最大值除以 10 来处理下一个较小的 10 次方,直到达到 0。

#include <stdio.h>

static void decompose(int n, long long ten_power, char *separator) {
    if (ten_power == 0) {
        return;
    }

    if (n >= ten_power) {
        printf("%s%lld", separator, (n / ten_power) * ten_power);
        separator = " + ";
    }
    decompose(n % ten_power, ten_power / 10, separator);
}

int main(int argc, char **argv) {
    int n;

    scanf("%d", &n);

    decompose(n, 100000000000LL, "");

    return 0;
}
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <math.h>

int main() {
    char n[10];
    scanf("%s", n);
    int out[10];
      
    for(int a=0; a<strlen(n); ++a) {
        char c = n[a];//one character at a time to be used with atoi()
        out[a] = atoi(&c) * (int) pow(10.0f, (double) strlen(n)-a-1);
        printf("%d ", out[a]);
    }
}

单词的长度需要一个循环,你一个一个地检索每个字符并使用atoi(ascii到整数)然后pow()方法从math.h 与 strlen(n)-a-1 处的指数以获得正确的数字。