給一個不多於五位的正整數,分別按要求輸出
1、求一個整數的位數
2、分別輸出每一位數字
3、逆序輸出
//1.
#include<stdio.h>
int count(int n)
{
int tmp;
for(tmp=1;n>1;tmp++)
{
n/=10;
}
return tmp;
}
int main()
{
printf("%d\n",count(1997));
}
//2.3
#include<stdio.h>
int main()
{
int i=789,w,q,b,s,g;
if (i>9999)
{printf(“輸入數字為五位數\n”);
w=i/10000;
q=i%10000/1000;
b=i%10000%1000/100;
s=i%10000%1000%100/10;
g=i%10000%1000%100%10;
printf(“個十百千萬位上的數字分別為%d,%d,%d,%d,%d\n”,g,s,b,q,w);
printf(“逆序輸出為%d,%d,%d,%d,%d\n”,w,q,b,s,g);
}
else if(i<9999&&i>999)
{printf(“輸入數字為四位數\n”);
q=i/1000;
b=i%1000/100;
s=i%1000%100/10;
g=i%1000%100%10;
printf(“個十百千位上的數字分別為%d,%d,%d,%d\n”,g,s,b,q);
printf(“逆序輸出為%d,%d,%d,%d\n”,q,b,s,g);
}
else if(i<999&&i>99)
{
printf(“輸入數字為三位數\n”);
b=i/100;
s=i%100/10;
g=i%100%10;
printf(“個十百位上的數字分別為%d,%d,%d\n”,g,s,b);
printf(“逆序輸出為%d,%d,%d\n”,b,s,g);
}
else if(i<99&&i>9)
{
printf(“輸入數字為二位數\n”);
s=i/10;
g=i%10;
printf(“個十位上的數字分別為%d,%d\n”,g,s);
printf(“逆序輸出為%d,%d,\n”,s,g);
}
else
{
printf(“輸入數字為一位數\n”);
g=i;
return 0;
}
}
改進版:
題①確實需要定義一個計數器,但是用for迴圈沒有考慮到輸入的數為0的這種情況,0也是一位數,結果應為1,因此將for迴圈改為do while迴圈就能解決這一問題;
題③只需在n/10的迴圈中,加入對10求餘的步驟,就能解決此問題;
題②實則比題③稍難一些,需要使用①的函式求出數字個數,具體方法如下:
(①-count、②-PrintOrder、③-PrintReverse)
#include <stdio.h> int Count(int n) { int temp = 0; do { n /= 10; temp ++; }while(n != 0); return temp; } void PrintOrder(int n) { int c = Count(n); int power = 1; for(int i = 1;i <= c - 1 ;i ++) { power *= 10; } do { printf("%d ",n / power); n %= power; power /= 10; }while(n != 0); printf("\n"); } void PrintReverse(int n) { int temp = 0; do { printf("%d ",n % 10); n /= 10; }while(n != 0); printf("\n"); } int main () { printf("%d\n",Count(0)); PrintOrder(0); PrintReverse(0); printf("%d\n",Count(711)); PrintOrder(711); PrintReverse(711); printf("%d\n",Count(47115)); PrintOrder(47115); PrintReverse(47115); return 0; }
結果如下: