2012-01-04 4 views
0

Я пытаюсь изменить число вводимых пользователем значений (то есть числа, вводимые пользователем, хранятся в массиве, пока он вводит положительное число). Однако, когда я ввожу 123 4569 752 896 -1 выход Как вы можете видеть, второе число не 9654. Я не мог исправить это.обратный номер ввода пользователем

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

// finding the number of digits 
int bsm(int a){ 
    int i=0; 

    while(a!=0){ 
     i++; 
     a=a/10; 
    } 

    return i; 
} 

// reversing the number 
int rev(int m,int a){ 
    int s=0,sum=0; 

    while(a!=0){ 
     s=a%10; 
     sum+=s*pow(10,m)/10; 
     m--; 
     a=a/10; 
    } 

    return sum; 
} 

int main() 
{ 
    int i=0,k,a[10],p,r; 
    scanf("%d",&a[i]); 

    while(a[i]>0){ 
     i++; 
     scanf("%d",&a[i]); 
    } 

    for(k=0;k<i;k++){ 
     p=bsm(a[k]); 
     r=rev(p,a[k]); 
     printf("\n%d ",r); 
    } 

    return 0; 
} 
+2

это домашнее задание? –

+1

Держите свой ввод как строки - не используйте ints. Таким образом, вы сможете легко получить доступ к отдельным символам, и вы не будете сталкиваться с проблемами округления, что может способствовать вашей проблеме. –

+0

Ну, это отлично работает для меня! Проверьте свои данные! –

ответ

1

Поскольку это выглядит как домашнее задание, я ограничу свой ответ двумя намеками.

  1. При использовании pow(), он возвращает число с плавающей точкой, а числа с плавающей точкой являются неточными. Перепишите свою программу, используя только целые математические строки или строки.

  2. Подумайте, как вы хотите обрабатывать числа, которые заканчиваются нулями; например, что должно быть наоборот 2000 года?

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