【问题标题】:reversing numbers input by user反转用户输入的数字
【发布时间】:2012-02-02 13:41:30
【问题描述】:

我正在尝试反转用户输入的数字(即,只要用户输入一个正数,用户输入的数字就会存储在一个数组中)。 但是,当我输入 123 4569 752 896 -1 输出是 321 9653 257 698 如您所见,第二个数字不是 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;
}

【问题讨论】:

  • 将您的输入保存为字符串——不要使用整数。这样,您就可以轻松访问单个字符,并且不会遇到可能导致问题的舍入问题。
  • 嗯,它对我来说很好用!查看您的意见!

标签: c arrays function loops


【解决方案1】:

由于这看起来像家庭作业,我将把答案限制在两个提示上。

  1. 当你使用pow()时,它返回一个浮点数,浮点数是不精确的。 使用整数数学或字符串重写您的程序。

  2. 考虑一下您希望如何处理以零结尾的数字;例如,2000的倒数应该是什么?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多