【ZZULIOJ】1061: 顺序输出各位数字

mac2025-11-15  6

【题目传送门】~

题目描述

输入一个不大于10的9次方的正整数,从高位开始逐位分割并输出各位数字。

输入

输入一个正整数n,n是int型数据

输出

依次输出各位上的数字,每一个数字后面有一个空格,输出占一行。例如,输入 12345 ,输出 1 2 3 4 5

样例输入

12345

样例输出

1 2 3 4 5

提示

注意整数运算避免使用double类型的函数如pow()。 本题可先用一个循环计算出最高位的位权h,然后再用一个循环,循环内容为:输出最高位(n/h)、扔掉最高位(n = n%h)、降低最高位位权(h = h/10),直到位权h为0。

这是刚接触C语言的时候,无聊写了四种方法~ 下面贴出来给大家参考,解释在代码里标注,就不单独写了~ 前两种的思想有一点神奇,后两种是基本思路~

1:将数字当做字符处理

#include <stdio.h> int main(){ char n; //将数字当做字符来对待骗一骗电脑,输入一个就输出一个。 while(1){ scanf("%c",&n); if(n=='\n') break; printf("%c ",n); } return 0; }

2:EOF的用法:

#include <stdio.h> int main(){ char n; while(scanf("%c",&n)!=EOF){ //EOF即文件还没有结束,这一句就表示输入还没有结束 if(n=='\n') break; printf("%c ",n); } return 0; }

3:

#include<stdio.h> int main() { int n,a; //n是输入的数字,假设n=123456 scanf("%d",&n); a=0; while(n>0) { a=a*10+n%10; //第一个while循环过后n倒序输出,即为a,a=654321 n=n/10; } while(a!=0) { printf("%d ",a%10); a=a/10; } /*a进入第二个while循环,当a不等于0,一直循环,每次循环输出a取余的数字,在对a处理,最后分别输出1 2 3 4 5 6 */ return 0; }

4:

#include<stdio.h> int main() { int n,a,b; scanf("%d",&n);//n是输入的数字,假如n为123456 a=n; b=1; while(a>9) { a/=10; b*=10; } //这个while循环用于统计n的位数,即通过b来实现 while(b>0) { printf("%d ",n/b);//直接从高位依次打印出1 2 3 4 5 6 n%=b; b/=10; } printf("\n"); return 0; }
最新回复(0)