【问题标题】:Calculations with loops循环计算
【发布时间】:2018-02-22 04:29:03
【问题描述】:

我正在尝试创建一个程序,它将显示一个(5 位整数)。
例如,如果用户输入“23456”,它将输出“2 3 4 5 6”。

我只能用整数(%d)捕获输入(scanf)。我设法在没有 for/while 循环的情况下做到了。

fivedigit = num / 10000; 
fivedigitr = num % 10000; 
fourdigit = fivedigitr / 1000; 
fourdigitr = fivedigitr % 1000;
threedigit = fourdigitr / 100;
threedigitr = fourdigitr % 100;
twodigit = threedigitr / 10;
twodigitr = threedigitr % 10;
onedigit = twodigitr / 1;
onedigitr = twodigitr % 1 
printf("%d %d %d %d %d\n", fivedigit,fourdigit,threedigit, twodigit, onedigit);

但是,现在我需要使用循环创建版本 2。我不确定如何缩短计算时间以减少冗余。我设法弄清楚的唯一一件事是通过除以 10 来减少“10000”。

for(i=0; i<5; i++){
fivedigit = num / division2;
fivedigitr = num % division2;
division2 = division2/10; 
}

任何帮助将不胜感激。我只需要知道如何减少冗余的基本方法,我就可以从那里继续前进并弄清楚。

谢谢。

【问题讨论】:

  • @SpencerWieczorek 我不允许将输入捕获为字符串/字符。要求是将输入捕获为整数。
  • @MFisherKDX 我理解使用字符串/字符更容易。这是分配给我的任务,这些是要求。
  • 循环没问题,但是在循环之前你需要设置fivedigitr = num,在循环内部你需要将num更改为fivedigitr。 OTOH,您可以在循环中将 fivedigitr 更改为 num
  • @user3386109 我假设需要 2 个变量?因为我正在计算它的商和余数。我需要余数(%)来计算以下数字等。
  • 请注意,在您的第一个解决方案中,您仅在前两行中使用 num。然后一个计算的剩余部分成为下一个计算的输入。这就是您尝试使用循环复制的内容。

标签: c


【解决方案1】:

您可以通过将查询更改为此获取 5 位数字的每个元素

 fivedigit = (num / 10000) % 10; 
 fourdigit = (num / 1000) % 10; 
 threedigit = (num / 100) % 10;
 twodigit = (num / 10) % 10;
 onedigitr = twodigitr % 10; 
 printf("%d %d %d %d %d\n", fivedigit, fourdigit, threedigit, twodigit, onedigit);

你也可以像这样使用循环来获取它

 for(int i=4; i>=0; i--)
    printf( "%d ", (num / (pow(10,i) ) % 10));

对于 num=23456,它将打印 2 3 4 5 6

【讨论】:

    【解决方案2】:

    我只需要知道如何减少冗余的基本方法

    提取最低有效数字并首先递归打印其他数字。

    // Pseudo code
    printnum(n)
      // think about % /
      last_digit = foo(n)   // find least digit of n
      other_digits = bar(n) // find all the digits except the least
      Are there any `other_digits` to print first? {
        printnum(other_digits)  
      }
      print last_digit
    

    如果目标是 5 位数,即使是小于 10,000 且值不会超过 99,999 的值,则确定有多少个 myriadsthousands、百、十、一个。

    int divisor = 10000;
    while (divisor) {
      int digit = num / divisor;
      printf(" %d", digit);
      num -= digit*divisor;
      divisor /= 10;
    }
    

    【讨论】:

      【解决方案3】:

      x 是用户输入值。digit 将包含该值的每个数字。 for 循环将更新 x/=10。条件 0

       for(i=x;0<x;){
      
       digit=x%10;
       printf("%d,", digit);
       x/=10;
         }
      

      【讨论】:

      • 点评来源: 您好,请不要只用源代码回答。尝试对您的解决方案如何工作提供一个很好的描述。请参阅:How do I write a good answer?。谢谢
      猜你喜欢
      • 2017-12-06
      • 2021-12-10
      • 2014-03-03
      • 2021-06-25
      • 2012-03-23
      • 1970-01-01
      • 1970-01-01
      • 2022-11-25
      • 1970-01-01
      相关资源
      最近更新 更多