【题目传送门】~
输入一个不大于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; }