【问题标题】:How can I truncate 0s from the end of numbers?如何从数字末尾截断 0?
【发布时间】:2021-10-04 21:38:02
【问题描述】:

我编写了一个 C 应用程序,它可以反转用户输入到应用程序中的数字。


实际输入:420

实际输出:024


但是,我希望从数字末尾截断 0(如果存在)。


输入:420

预期输出:24


 #include <stdio.h>
 int main(void) {
 int x, s;
 scanf("%i",&x);

 for(int i = x; i > 0; ){
   s = i % 10;
   printf("%i", s); 
   i = i / 10;
    }

   return 0;
  }

【问题讨论】:

  • 您需要一个名为non_zero_digit_found 的变量。最初,该变量应该为假。当您找到一个非零数字时,将变量设置为 true。仅在变量为真时打印数字。请注意,如果用户输入0 作为数字,则循环将以变量仍然为假结束,并且不会打印任何数字。这种特殊情况需要处理。
  • @codeloverfromkz 您明确输出零 printf("%i", s);
  • codeloverfromkz,输入 0123,预期输出是什么?
  • 输入"0",预期的输出是什么?

标签: c loops for-loop


【解决方案1】:

在这个for循环中

 for(int i = x; i > 0; ){
   s = i % 10;
   printf("%i", s); 
   i = i / 10;
    }

如果s 等于0,您将明确输出零。

此外,如果 x 最初等于 0,则不会输出任何内容。

如果输入的数字是负数,则不会再输出任何内容,这会使程序的用户感到困惑。

其中一种方法是根据输入的数字构建一个新数字。例如

#include <stdio.h>

int main(void) 
{
    const int Base = 10;
    
    int x = 0;
    scanf( "%i", &x );
    
    long long int reverse = 0;
    
    do
    {
        reverse = Base * reverse + x % Base;
    } while ( x /= Base );
    
    printf( "%lld\n", reverse );
    
    return 0;
}

如果进入

-123456789

那么输出将是

-987654321

【讨论】:

    【解决方案2】:

    你可以这样,直到你没有找到第一个非零的数字不打印。

    #include <stdio.h>
    
    int main(void) {
      int x, s;
      scanf("%i",&x);
    
      int first = 1;
    
      for(int i = x; i > 0; ){
        s = i % 10;
    
        if (first && s == 0){
          i = i / 10;
          if (i % 10 != 0)
            first = 0;
          continue;
        }
    
        printf("%i", s); 
        i = i / 10;
      }
    
      return 0;
    }
    

    【讨论】:

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