int main() { std::cout << countNum(0) << '\n'; std::cout << countNum(1) << '\n'; std::cout << countNum(5) << '\n'; std::cout << countNum(197) << '\n'; std::cout << countNum(59345) << '\n'; }
int main(int argc, char const *argv[]){ if (argc != 2){ printf("usar: a.out <nombre archivo>\n"); return -1; }else{ FILE *inFile; char *fileName; int * numeros; int length; fileName=argv[1]; inFile = fopen(fileName, "r"); //Se abre el archivo que contiene los datos if(inFile == NULL){ printf("No se puede abrir el fichero: %s\n", fileName); exit(EXIT_FAILURE); }else{ length = countNum(inFile); numeros = (int *)malloc(sizeof(int)*length); //Se reserva espacio en memoria para los valores ingresados getData(&length, numeros, inFile); //Se asigna el espacio en memoria a los valores ingresados //printData(&length, numeros); } free(numeros); int value; value = fclose(inFile); if (value == 0) printf("Se cerro el fichero\n"); return 0; } }
int countNum(int n){ if(n<=0) return 0; int grade=1000000000; while(n<grade){ grade/=10; } if(grade==1) return 1; int result=0; int highVal=n/grade; if(highVal>1){ result=grade+countNum(grade-1)*highVal+countNum(n%grade); }else{ result=n%grade+1+countNum(grade-1)+countNum(n%grade); } return result; }
int countNum(int n){ return (n >= 10) ? 1 + countNum(n/10) : 1; }
//------!!!错误1:没有考虑输入-1的情况 //------!!!错误2:题目需要计算包含1的数字中1出现次数总和,而不是包含1的数字的个数 //------!!!错误3:输入10 //------!!!错误4:输入20 //------!!!错误5:输入101 //------!!!错误5:输入110 int Solution::countDigitOne(int n){ return countNum(n); }