尝试反转我的 for 循环(创建一个沙漏)
Trying to reverse my for-loops (creating a hourglass)
我正在尝试创建一个沙漏,似乎我的反向 for 循环的间距弄乱了,我不知道如何在不弄乱 for 循环的情况下删除额外的 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++){
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;
}
我的输出:
Enter a long number
Enter your number = 12345
5 4 3 2 1
5 4 3 2
5 4 3
5 4
5
5
4 5
3 4 5
2 3 4 5
1 2 3 4 5
删除顶部多余 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;
}
输出
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
我正在尝试创建一个沙漏,似乎我的反向 for 循环的间距弄乱了,我不知道如何在不弄乱 for 循环的情况下删除额外的 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++){
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;
}
我的输出:
Enter a long number
Enter your number = 12345
5 4 3 2 1
5 4 3 2
5 4 3
5 4
5
5
4 5
3 4 5
2 3 4 5
1 2 3 4 5
删除顶部多余 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;
}
输出
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