C 尝试反转我的for循环(创建沙漏)

C 尝试反转我的for循环(创建沙漏),c,for-loop,hourglass,C,For Loop,Hourglass,我试图创建一个沙漏,似乎我的反向for循环的间距弄乱了,我不知道如何删除额外的5而不弄乱for循环 我的代码 #include <stdio.h> #include <math.h> int main(){ long long number; printf("Enter a long number\n"); printf("Enter your number = "); scanf("%lld", &

我试图创建一个沙漏,似乎我的反向for循环的间距弄乱了,我不知道如何删除额外的5而不弄乱for循环

我的代码

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

int main(){

long long number;

printf("Enter a long number\n");
printf("Enter your number = ");
scanf("%lld", &number);


for(int j=1; j<= (log10(number)+1); j++){

    for(int i=1; i<= (log10(number)+1) - (j-1); i++){
       printf("%d   ", (number%((int)pow(10, i)))/(int)pow(10, i-1));
    
   }

printf("\n");
printf("%*s", 2*j-1, "  ");

}

for(int j=(log10(number)+1); j>=1; j--){
    
    for(int i=(log10(number)+1)-(j-1); i>=1 ; i--){
        printf("%d   ", (number%((int)pow(10, i)))/(int)pow(10, i-1));
    
   }
   
printf("\n");
printf("%*s", 2*j-1, "  ");

}



   return 0;
}
移除顶部多余的5个,最好的方法是什么?我在间距上做错了什么


我试图输出的内容:

Enter a long number
Enter your number = 12345
5   4   3   2   1
  5   4   3   2
    5   4   3
      5   4
        5   
      4   5
    3   4   5
  2   3   4   5
1   2   3   4   5

在写数字之前,你应该把行缩进。对于第二个循环,跳过第一行

请尝试以下代码:

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

int main(){

    long long number;
    
    printf("Enter a long number\n");
    printf("Enter your number = ");
    scanf("%lld", &number);

    for(int j=1; j<= (log10(number)+1); j++){
    
        printf("%*s", 2*(j-1), "");  // indent row
        for(int i=1; i<= (log10(number)+1) - (j-1); i++){
           printf("%d   ", (number%((int)pow(10, i)))/(int)pow(10, i-1));
        
        }
    
       printf("\n");
    }


    for(int j=(log10(number)+1)-1; j>=1; j--){
        
        printf("%*s", 2*(j-1), "");  // indent row
        for(int i=(log10(number)+1)-(j-1); i>=1 ; i--){
            printf("%d   ", (number%((int)pow(10, i)))/(int)pow(10, i-1));
        }
       
       printf("\n");
    }
   return 0;
}

代码的问题在于,它将数字与其间距合并。这对于第一个循环来说是可以的,但是在第二个循环中会导致问题,因为数字的方向是相反的。我建议您为第二个循环维护一个单独的计数器来处理间距。就像单独的计数器是一个新变量??是的,是一个新变量。可以通过将第一个循环中的额外
5
更改为
for(int j=1;js新变量是int还是long?我很难理解它。
#include <stdio.h>
#include <math.h>

int main(){

    long long number;
    
    printf("Enter a long number\n");
    printf("Enter your number = ");
    scanf("%lld", &number);

    for(int j=1; j<= (log10(number)+1); j++){
    
        printf("%*s", 2*(j-1), "");  // indent row
        for(int i=1; i<= (log10(number)+1) - (j-1); i++){
           printf("%d   ", (number%((int)pow(10, i)))/(int)pow(10, i-1));
        
        }
    
       printf("\n");
    }


    for(int j=(log10(number)+1)-1; j>=1; j--){
        
        printf("%*s", 2*(j-1), "");  // indent row
        for(int i=(log10(number)+1)-(j-1); i>=1 ; i--){
            printf("%d   ", (number%((int)pow(10, i)))/(int)pow(10, i-1));
        }
       
       printf("\n");
    }
   return 0;
}
Enter a long number
Enter your number = 12345
5   4   3   2   1   
  5   4   3   2   
    5   4   3   
      5   4   
        5   
      4   5   
    3   4   5   
  2   3   4   5   
1   2   3   4   5