【问题标题】:Why does my "for" loop run only two times?为什么我的“for”循环只运行了两次?
【发布时间】:2019-11-22 16:54:23
【问题描述】:

我正在做的任务是输入 5 个 5 位数的随机数,压缩它们并得到它们的总和。那么我们如何压缩它们呢?我们去掉了第二个和第四个数字。例如 12345 到 10305。

这是我的代码。

int main()
{
    int n=5,i,j,number5,num1,num3,numb5,sum;
    for(i=0;i<n;i++) // 5 times we read next for loop right ?
        for(j=0;j<i;j++){ // this loop read 5 times 5 digits number 
            scanf("%d",&number5); // scanf 1 number
            while(number5){ // while number isn't 0 ( false )
                num1=number5/10000;
                num1*=10000;
                num3=(number5%10000)%1000/100;
                num3*=100;
                numb5=(number5%10000)%1000%100%10; 
                numb5*=1;// mathematic operations to get to 1st third and 5th number
                number5=0; // set the number5 to 0 so we can go out of while right ?
            }
            sum=num1+num3+numb5; // we get the sum of the first 5 digits and we get it on the second when j++ right ?

        }
         printf("%d",sum);// on the end of all five number with 5 digits we get the sum right ?
}

那么为什么我的for 循环只运行了两次而不是五次?

【问题讨论】:

  • 压缩?这是什么意思?
  • @EugeneSh。 OP 表示删除数字。 “压缩”在这里并不合适。
  • 为什么j&lt;i是第二个for循环中的条件?
  • 声明numb5=(number5%10000)%1000%100%10; 在数学上等同于numb5=number5 % 10;
  • 如果你想输入 5 个数字,那么你只需要一个运行 5 次迭代的循环。不需要 3 个嵌套循环。

标签: c for-loop while-loop breakpoints


【解决方案1】:

只需将第二个循环中的j&lt;i 设置为j&lt;5,您就可以获得n 次的五个5 位压缩数字的总和。

【讨论】:

  • 这项工作,但为什么我没有?当我想用 int i 缩放时?
  • 好吧,我明白我的错误是 0,所以我们进入,0
【解决方案2】:

你真的想多了。

int n;

for(int i=0; i < 5; ++i)
{
    // read first number eg 12345
    scanf("%d",&n);
    int d1 = n % 10;    // ones place = 5
    n /= 100;           // n becomes 123
    int d100 = n % 10;  // hundreds place = 3
    n /= 100;           // n becomes 1
    int d10000 = n % 10;    // ten thousands place = 1

    int smallSum = 100*d10000 + 10*d100 + d1;
    // prints 135 
    printf("sum version 1 = %d\n", smallSum); 

    int bigSum = 10000*d10000 + 100*d100 + d1;
    // prints 10305
    printf("sum version 2 = %d\n",bigSum);     
}

See it in action here

【讨论】:

  • 不是真的,伙计,我需要插入 5 次 5 个不同的数字,即 5 位数字,而我悲伤的“压缩”只是为了将前第三和第五个数字按自己的位置(如十分之一)十万,然后计算总和。
  • @Starterpack 这正是它的作用。
  • 看,不是 1+3+5 的总和,而是 1000+300+5 你现在明白了吗?
  • @Starterpack 我误解了。以上已更正。
  • @Starterpack 您的帖子说12345 应该产生135,而不是您的评论建议的10305。是哪个?
【解决方案3】:

我在 sn-p 中提到的错误是唯一的问题,其余一切都很好。 请参考附件sn-p。

// only two loops are required    
for(int i=0;i<5;i++){
    scanf("%d",&number5);
    sum=0;
    while(number5){ 
            num1=number5/10000;
            num1*=100;//it should be 100 isntead of 10000
            num3=(number5%10000)%1000/100;
            num3*=10;// it should be 10 istead of 100
            numb5=(number5%10000)%1000%100%10; 
            numb5*=1;
            number5=0; 
        }
    sum=num1+num3+numb5; 
    printf("%d\n",sum);
}

【讨论】:

  • 没关系,我已经修好了,但感谢您的帮助。
【解决方案4】:
#include <stdio.h>
    #include <stdlib.h>

    int main()
{
    int n=5,i,j,number5,num1,num3,numb5;
    int sum=0;


    for(i=0;i<n;i++) {
       scanf("%d",&number5);//runs 5 times to get 5 inputs

       sum+=(number5/10000)*10000; // take the value of first position
       sum+=((number5/100)%10)*100; // take the value of third position
       sum+=(number5%10);// take the value of fifth position

        }
         printf("%d",sum);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-04
    相关资源
    最近更新 更多