【ZZULIOJ】1061: 順序輸出各位數字

【題目傳送門】~

題目描述

輸入一個不大於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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章