1. 程式人生 > >給一個不多於五位的正整數,分別按要求輸出

給一個不多於五位的正整數,分別按要求輸出

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;
}

結果如下:
在這裡插入圖片描述