2014-12-05 2 views
0

у меня есть сценарий проблемы, где в, я долженшифрованного набора целых чисел

1] получить п число testcases 2] получить ввод цифр [Может быть несколько Интса в один линия], например: 12 34 123 3] полностью изменить время не в качестве 21 43 321 4] добавить обращенные числа 21 + 43 + 321 = 365 5] снова реверсе нет 365 до 563 6] выход 563

Выше приведен пример 1 такого теста. если testcase = 3 Input1 => 21 22 100: O/P => 12 + 22 + 001 = 35 => final op => 53 Input2 => 11 100 32: O/P => 11 + 001 + 23 = 35 => конечная оп => 53 данных 3 => 100 21: O/P => 001 + 12 = 13 => конечная оп => 31

#include<stdio.h> 
#include<string.h> 
#include<malloc.h> 

#define MAX_N 10000 
#define MAX_D 5000 

int reverse_digits(char* temp){ 
     int no,rev_no = 0; 
     if(temp == NULL) return -1; 
     no = atoi(temp); 
     printf("\n no : %d \n",no); 
     while(no > 0){ 
       rev_no = ((rev_no * 10)+(no % 10)); 
       no = no/10; 
     } 
     return rev_no; 

} 
int main(){ 
     int number,prev_no,sum,i; 
     char* temp1 = NULL; 
     char* test_case = malloc(10); 
     char* n = malloc(MAX_D); 
     char* op = malloc(MAX_D); 
     if(NULL == n || NULL == test_case || NULL == op) return -1; 
     number = prev_no = sum = i = 0; 
     fgets(test_case,10,stdin); 
     for(i = 0; i < atoi(test_case); i++){ 
       memset(op,0,MAX_D); 
       fgets(n,MAX_D,stdin); 
       temp1 = strtok(n," "); 
       prev_no = reverse_digits(temp1); 
       printf("\n prev_no : %d \n",prev_no); 
       while(temp1 != NULL){ 
         temp1 = strtok(NULL, " "); 
         if(temp1 != NULL){ 
           number = reverse_digits(temp1); 
         } 
         sum = prev_no + number; 
         prev_no = sum; 
       } 
       printf("\n sum : %d \n",sum); 
       sprintf(op,"%d",sum); 
       printf("\n op : %s` \n",op); 
       printf("\n rev: %d \n",reverse_digits(op)); 
     } 
     return 0; 
} 

Если я дам вход как 1 и один целое число, как показано ниже, я получаю ответ с размером мусора. Не могу понять почему.

оп:

[email protected]:~/angus/myschool$ ./a.out 
1 
12 

no : 12 

prev_no : 21 

sum : 21 

op : 21` 

no : 21 

rev: 3254512 

Bu ответ должен быть 12.

ответ

1

Вы забыли инициализировать rev_no в reverse digits.

int reverse_digits(char* temp){ 
     int no,rev_no = 0; 
+0

Да .. я пропустил в intialise 0. Thank – Angus

+0

Также я добавил Sprintf (оп, "% d% C", сумма, '/ 0'); – Angus

+0

Есть ли способ оптимизировать вышеуказанный код, так что выполнение происходит намного быстрее – Angus

Смежные вопросы