0
votes

Numéro de décomposition de l'addition de c

J'aime créer un programme qui décomposera un numéro, supposons que n = 123 attendu est xxx pré>

si la sortie n = 103, la sortie attendue devrait être uniquement p>

#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);     
  } 


}


1 commentaires

Vous semblez avoir sous-spécifié le problème: combien de termes voulez-vous décomposer n dans?


4 Réponses :


0
votes

Utilisation de la récursion. Pour les grands nombres entiers change int à long / long LONG basé sur vos besoins. XXX

NOTE: N'oubliez pas de lien -lm Tout en compilant le code (comme vous utilisez math.h )


0 commentaires

0
votes

Tout d'abord, vous devez compter le nombre de chiffres. Après avoir connu le nombre de chiffres, vous pouvez trouver la puissance de chaque chiffre. Ensuite, vous devez modulo votre numéro avec sa puissance la plus élevée dans chaque itération afin de vider le chiffre le plus élevé.

gcc <name of your C file> -lm


0 commentaires

1
votes

Ceci peut être fait de manière récursive, en commençant par la puissance maximale de 10 000 000 000; Et dans chaque appel récursif, vous traitez la prochaine puissance moindre de dix en divisant le précédent max de 10, jusqu'à atteindre 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;
}


2 commentaires

Meilleure approche! Merci, j'espère que tous sont maths wiz = d


Je pense qu'au-delà de la satisfaction personnelle, ma réponse est plus compréhensible que ce code de code, je doute que l'OP l'ait compris en fait, mais a choisi les trucs plus fantastiques sur la simplicité et la clarté. La seule bonne raison de upvote C'est qu'il ne nécessite pas de bibliothèque de mathématiques et est sujette à l'étude de cas, mais à la fin, il ne devrait pas certainement pas être la réponse acceptée



0
votes
#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]);
    }
}
There needs to be a loop on the length of the word, you retrieve each character one by one and use atoi (ascii to integer) then the pow() method from math.h with the exponant at strlen(n)-a-1 to get the correct number.

0 commentaires