|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: May 2004
Messaggi: 2691
|
[c] ancora sul progr. x fare sottrazione tra 2 numeri da 20 cifre..correzione urgente
ciao, visto che l'altro post è andato un po' off topic, mi permetto di aprirne un altro, dove vi chiedevo la "correzione" del programma che ho battuto insieme ad un amico per fare la sottrazione tra due numeri naturali di massimo 20 cifre cad.
come appoccio ho seguito quello suggeritomi da Marinelli, moderatore del forum, ossia: - Leggi il primo numero da input (come stringa) e verifichi che sia lungo 20 caratteri; - Leggi il secondo numero da input e verifichi che sia lungo 20 caratteri o meno; - Usando la funzione "atoi" dentro ad un for converti carattere per carattere la stringa in interi, che metti in un array (lo fai per entrambi i numeri) - Con una funzione costruita ad hoc esegui la sottrazione tra i due array, facendo attenzione ai riporti e alla lunghezza dei due array; se entrambi gli array sono di 20 cifre devi controllare se il sottraendo non sia più grande del minuendo (se non sbaglio in questo caso devi restituire 0). Per la conversione da carattere a intero puoi usare la funzione atoi: http://www.cplusplus.com/ref/cstdlib/atoi.html Per conoscere la lunghezza di una stringa puoi usare la funzione strlen: http://www.cplusplus.com/ref/cstring/strlen.html tuttavia il programma non funziona e io devo consegnarlo domani mattina.. per favore, è urgentissimo, qualcuno potrebbe correggere gli errori ? grazie mille ciao Codice:
#include <stdlib.h> #include <stdio.h> #include <string.h> #define TERM 100 int main(int argc, char *argv[]) { char num[21]; char num2[21]; printf("Inserisci il primo numero\n"); scanf("%s",&num); printf("Inserisci il secondo numero\n"); scanf("%s",&num2); //Inizio a copiare l'array char dentro un array int unsigned int num_i[20]; unsigned int num_i2[20]; int pos; char temp[2]; temp[1]='\0'; for (pos=0; pos<=20; pos++) { temp[0]=num[pos]; num_i[pos]=atoi(temp); printf("%i\n",num_i[pos]); } temp[1]='\0'; for (pos=0; pos<=20; pos++) { temp[0]=num2[pos]; num_i2[pos]=atoi(temp); printf("%i\n",num_i2[pos]); } int numero[20],numero2[20]; memset(numero,'0',sizeof(numero)); memcpy(numero+20-strlen(num),num_i,strlen(num)); memset(numero2,'0',sizeof(numero2)); memcpy(numero2+20-strlen(num2),num_i2,strlen(num2)); //Inizio la sottrazione int cicle,int result[20]; for (cicle=20;cicle>=0;cicle--) { if( sizeof(numero2) > sizeof(numero) ) printf("Errore! Perfavore inserire prima il numero maggiore!\n"); exit 0; if( numero[cicle] > numero2[cicle]) result[cicle] = numero[cicle] - numero2[cicle]; if( numero[cicle] < numero2[cicle]) { numero[cicle-1]--; numero[cicle] += 10; result[cicle] = numero[cicle] - numero2[cicle]; } if( numero[cicle] < 0) printf("Errore!\n"); printf("Il risultato della sottrazione è: %i",reult); return(0); } ![]() ![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
|
ormai é tardi e comunque ci sarebbe voluto troppo tempo ... é pieno di e/orrori ! in bocca al lupo
![]()
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z ∞Mb - Win Eight SP (1 > yours) 16 Valve |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Aug 1999
Città: Tolmezzo (UD) - Milano
Messaggi: 13744
|
Ti ho risposto in privato stanotte.
Si poteva comunque continuare sull'altra discussione (ora le unisco), anche se effettivamente qualcuno ci aveva fatto i cavolacci propri sopra. Ciao ![]()
__________________
...to go where no one has gone before. One ring to rule them all, one ring to find them, one ring to bring them all and in darkness bind them. Caron, non ti crucciare: vuolsi così colà dove si puote ciò che si vuole, e più non dimandare. |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Aug 1999
Città: Tolmezzo (UD) - Milano
Messaggi: 13744
|
Anzi, vedo che hai scritto la stessa cosa anche lì, dunque questa discussione la chiudo.
Ciao
__________________
...to go where no one has gone before. One ring to rule them all, one ring to find them, one ring to bring them all and in darkness bind them. Caron, non ti crucciare: vuolsi così colà dove si puote ciò che si vuole, e più non dimandare. |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 11:05.