1. 程式人生 > >給一個正整數n,求出位數。並按正序輸出,逆序輸出

給一個正整數n,求出位數。並按正序輸出,逆序輸出

求出位數

通過讓給定的正整數n整除10,且每整除一次讓統計位數的變數count自增一,返回count得到位數。

#include<stdio.h>
int GetFigure(int n)
{
	int count=0;
	do
	{
	   count ++;
	   n /=10;
	}while(n!=0);
	return count;
}//while迴圈的bug在於n=0,位數輸出為0

逆序輸出數字。

例如1234-》4 3 2 1,首先n對1000取餘可以得到個位數4,接著丟棄個位數,得到123,

對100取餘得到十位數字3,再丟棄十位數字。

void PrintReverse(int n)
{
	do
	{
	printf("%d",n%10);  //得到個位數字
	n/=10;              //丟棄個位
	}while(n!=0);
	printf("\n");
}

正序輸出數字

要按順序輸出各個位上的數字,可以通過整除10的不同次方來得到每個位上的數字
如123 按順序輸出為1,2,3, 要得1→123/100,得到2→取餘捨棄最高位後,整除10。此型別題都是這種方法。

void PrintOrder(int n)
{
	int m = GetFigure(n);   //m儲存整數位數,呼叫求出位數函式
	//pow();
	int power = 1;
	for(int i=0;i<m-1;i++)
	{
		power *= 10;      //此時power=100
	}
	do
	{
		printf("%d ",n/power);   //得到最高位數字
		n %= power;              //丟棄最高位
		power /= 10;             //此時power=10
	}while(n != 0);
	printf("\n");
}
int main()
{
	printf("%d\n", GetFigure(9));
	printf("%d\n", GetFigure(19));
	PrintReverse(123);
        PrintReverse(12345);
	PrintOrder(123);
	PrintOrder(12345);
	  return 0;
}

相關推薦

一個整數n位數輸出輸出

求出位數通過讓給定的正整數n整除10,且每整除一次讓統計位數的變數count自增一,返回count得到位數。#include<stdio.h> int GetFigure(int n) { int count=0; do { count ++;

【c語言】一個不多於五位的整數: 1.它是幾位數 2.分別輸出每一位數字 3.輸出各位數字

#include<stdio.h> #include<math.h> //求出它是幾位數 int Count(int n) { int tmp = 0; while (n != 0) { tmp++; n /= 10;

不多於5位數整數1、它是幾位數;2、打印各位數字

《C程式設計 第二版》P105 5.7 給一個不多於5位數的正整數,要求:1、求出它是幾位數;2、分別打印出每一位數字;3、按逆序打印出各位數字,例如原數為321,應輸出123. 答:第2問和第3重複,沒寫第2問,直接第3問。 #include<stdio.h>

安裝App後點選開啟home回首頁再開啟出現App重複載入的問題

安裝App後,點選開啟。再按home回首頁,再開啟,出現App重複載入的問題  具體表現是:   1、將app包通過電腦QQ傳送到手機QQ上面,點選安裝,安裝後選擇開啟app (此間的應用邏輯應該是要觸發 【閃屏頁Activity】, 然後跳轉 【主頁Activity】)   2

給定一個整數n0到n中有幾個數滿足其二進位制表示不包含連續的1

樣例: 輸入:5 輸出:5 0 01 10 100 101滿足,11不滿足。 那麼6144呢? 答案是610,怎麼去計算呢? 思路:查詢從0到n中有多少個數包含連續的1,然後在總數中去掉這些情況,得到

給定一個十進位制整數N,從1開始N的所有整數數字1出現的次數(java實現)

【程式設計之美】給定一個十進位制正整數N,求出從1開始,到N的所有整數,數字1出現的次數。 例如,N=2,則兩個數為1,2 。數字1出現的個數是1. 又如n = 20.則20個數中1出現的為:1,10,11,12,13,14,。。。19 共有12個。 設計一個演算法

階乘輸入一個整數 n輸出n

factor i++ print 階乘 pri tor n) printf main #include<stdio.h>int factorial (int n); int main(){ int n; scanf("%d",&n); printf("

不多於5位的整數它是幾位數分別輸出每一位輸出每一位數字

給出不多於5位的正整數,要求: 1,求出它是幾位數 2,分別輸出每一位數 3,按逆序輸出每一位數字,例如原數為321,應輸出123. 第一種方法: (1)求一個數是幾位數,有一種方法是: if (x > 9999) { place = 5; printf("這是一個五位數\n");

[PAT][Python](讀入一個整數 n計算其各位數字之和用漢語拼音寫和的每一位數字)

讀入一個正整數 n,計算其各位數字之和,用漢語拼音寫出和的每一位數字。 輸入格式:每個測試輸入包含 1 個測試用例,即給出自然數 n 的值。這裡保證 n 小於 10^100​​ 。 輸出格式: 在一行內輸出 n 的各位數字之和的每一位,拼音數字間有 1 空格,但一行中最後一個拼音數字後沒有空

任意給定一個整數N一個最小的整數M(M>1)使得N*M的十進位制表示形式裡只含有1和0

解決這個問題首先考慮對於任意的N,是否這樣的M一定存在。可以證明,M是一定存在的,而且不唯一。 簡單證明:因為   這是一個無窮數列,但是數列中的每一項取值範圍都在[0, N-1]之間。所以這個無窮數列中間必定存在迴圈節。即假設有s,t均是正整數,且s<t,有 。於是迴圈節長度為t-s。於是10

給定一個整數n將其分成m段每段為n1n2...nm怎麼劃分使得n1*n2*...*nm最大

#include <iostream> #include <fstream> #include <math.h> using namespace std; #define SIZE 1000 unsigned long m[SIZE], t[SIZE]; //m

輸入一個正數x和一個整數n下列算式的值要求定義兩個調用函數:fact(n)計算n的階乘;mypow(x,n)計算x的n次冪(即xn)兩個函數的返回值類型是double

返回值 %d time data body 一個 pow color printf 題目描述 輸入一個正數x和一個正整數n,求下列算式的值。要求定義兩個調用函數:fact(n)計算n的階乘;mypow(x,n)計算x的n次冪(即xn),兩個函數的返回值類型是d

一個整數n計算從1-n中出現1的次數

con 個數字 優化 個數 數字 higher 通過 需要 出現的次數 如12出現1的次數為5,分別是:1,10,11,12 一般做法:從1-n遍歷,計算每一個數中每一位出現1的次數 function count(num){ var n=0;

給定一個整數位數以及輸出

給定一個正整數,求其位數以及正序逆序輸出 #include<stdio.h> int Count(int n)//求正整數的位數 { int tmp=0; do { n=n/10; tmp++; }while(n!=0); return tmp; } void PrintReve

編寫一段 JS 程式碼一個整數的各個位數之和

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <style> </style

輸入一個整數n輸出所有和為n的連續整數序列

1 public static void main(String[] args) { 2 Scanner sc = new Scanner(System.in); 3 while (true) { 4 System.out.prin

【面試題】多個無序整數位數

題目:給你很多很多正整數,但它們是無序的,找出它們的中位數。 最開始就想說使用快排,先將這些整數進行排序,然後找到中位數,但又想到可能不是面試官想要的答案,於是又採用了其他方法,最終也沒完全解決出來。 【經驗總結:當面試官問了一個演算法題後,如果想不到優化一點的方法,就先

輸入一個整數n輸出n!的值  其中n!=1*2*3*…*n

問題描述   輸入一個正整數n,輸出n!的值。  其中n!=1*2*3*…*n。 演算法描述 n!可能很大,而計算機能表示的整數範圍有限,需要使用高精度計算的方法。使用一個數組A來表示一個大整數a,A[0]表示a的個位,A[1]表示a的十位,依次類推。  將a乘以一個整